Small but Beautiful

Door Pim -, 16 jaar geleden, 6.322x bekeken

Ik heb een vandaag een klein framework gemaakt die ik graag met jullie deel.
Small but Beautiful op Github met 'Hello World' applicatie.

Alle positieve en negatieve (opbouwende) reacties zijn welkom.

Wat functionaliteiten:
- Dependency injection container
- Uitbreidbare views (layouts dus)
- View partials
- Routing. De route van het voorbeeld is: '/hello[/:name]'
- Fijn configureren in native PHP ;-)
- Alles in 1 bestand :D
- Wel mogelijkheid tot view-helpers, maar geen view-helpers
- (Soort van) OOP
- Geen ingewikkelde namespaces (wel een autoloader daarvoor)
- Goed aanpasbaar: in de DIC classes overschrijven
- (Vast) razendsnel
- Debug functie

De hello world app:
#app/routes.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

return array(
    '/hello[/:name]' => array(
        'defaults' => array(
            '_controller' => 'hello:name',
            'name' => 'Pim'
         ),
        'requirements' => array(
            'name' => '[A-z]+'
        ),
    )
);

?>


#App/Controlers/HelloController.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

class Controllers_HelloController extends Controller {
    public function nameAction($name)
    {

        return $this->_render('hello', array('name'=>$name));
    }
}

?>


#App/views/hello.phtml
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$this
->extend('layout', array('title'=>'Hi '.$name));
?>

Hello <?php echo $this->e($name); ?>


#App/views/layout.phtml
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Site - <?php echo $title ?></title>
    </head>
    <body>
        <?php
            echo $content;
        ?>

    </body>
</html>


Vooral die uitbreiding van de views vind ik wel mooi, al zeg ik het zelf...

/hello geeft:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Site - Hi Pim</title>
    </head>
    <body>
        Hello Pim    </body>
</html>


/hello/Rudolf
geeft
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Site - Hi Rudolf</title>
    </head>
    <body>
        Hello Rudolf    </body>
</html>

Gesponsorde koppelingen

PHP script bestanden

  1. leeg.txt

 

Er zijn 10 reacties op 'Small but beautiful'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Johan Dam
Johan Dam
16 jaar geleden
 
0 +1 -0 -1
Ziet er wel geinig uit, al zou ik dat '(vast) razendsnel' uit je beschrijving halen vanwege de array-clusters die je nodig hebt.

Ik zou hier een simpel object van maken die je extend met een 'default' classe.

Een download link naar een .zip zou ook prettig zijn ipv leeg.txt :P
- Ariën  -
- Ariën -
16 jaar geleden
 
0 +1 -0 -1
Huh?

Quote:
- Wel mogelijkheid tot view-helpers, maar geen view-helpers

Wel of niet?
Jasper DS
Jasper DS
16 jaar geleden
 
0 +1 -0 -1
wel een mogelijkheid maar het zit er niet in
Pim -
Pim -
16 jaar geleden
 
0 +1 -0 -1
In de view verwijst $this->helpers naar alle services met de prefix view_helper_. Er zijn er op dit moment alleen geen ;)

De service view_helper_url is dus in de view toegankelijk met $this->helper->url.

Stel dat je een klasse Url maakt die __invoke() implementeert. Doe je $c->set('view_helper_url', function() {return new Url(); }, true); en in de view dan $this->helper->url($args);

@Johan, wat bedoel je met 'array-clusters'? Multi dimensionale arrays?
Niels K
Niels K
16 jaar geleden
 
0 +1 -0 -1
Ziet er op zich leuk uit. Leuke dat je DI(C) gebruikt, komt dat nadat gesprek via msn? :)

Gebruiken zal ik het niet, daarvoor is het te klein en mis ik teveel functies. Voor de rest ziet de code er goed uit, alleen mis ik phpdoc?
Johan Dam
Johan Dam
16 jaar geleden
 
Ja ik bedoel inderdaad de multidimensionale array die je in routes.php hebt. Ik kan me voorstellen dat zo'n bestand best groot word en hoe meer dimensies je toevoegd hoe trager arrays worden, en hoe meer geheugen je nodig hebt. Mijn geheugen zegt dat dit exponentieel verhoogt word maar ik ben mijn test-gegevens kwijt zo te zien... zal ze later nog eens proberen op te zoeken.
Pim -
Pim -
16 jaar geleden
 
1 +1 -0 -1
Haha ja deels. Deels geïnspireerd door de code Symfony2. Daar wordt ook nauwelijks phpDoc gebruikt, alleen waar het nodig is. Het is zo vaak vanzelfsprekend, denk aan: Autoloader::load($className), Container#get($name), ContainerBuilder#getContainer() of Route#matches($query). Soms is het idd te onduidelijk en moet er phpDoc bij.

Maar misschien is dat naïef en weet ik over een week niet meer wat wat is ;)
Niels K
Niels K
16 jaar geleden
 
0 +1 -0 -1
Mooi :) Dependency Injection is echt super cool :)

Tja, ik heb mezelf aangeleerd om altijd phpdoc te gebruiken. Er zijn namelijk ook mensen die wat minder verstand hebben van OO en PHP maar die zouden er door middel van de documentatie er ook moeten komen vind ik.
Pim -
Pim -
16 jaar geleden
 
Jaja :D.
Maar veel phpDocs zijn zo nutteloos... Een beschrijving van de klasse als geheel is wel vaak nuttig, maar per methode niet echt.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niels K
Niels K
16 jaar geleden
 
0 +1 -0 -1
Ligt er aan wat de methode precies doet natuurlijk :) Als je alleen iets retourneert wordt het al gauw overbodig ja.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. leeg.txt

Labels

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.