Hmmm, laat ik de vraag toch maar eens stellen. Ik wil graag een eigen framework / beheersysteem maken. De bedoeling is dat ik als het systeem klaar is heel makkelijk een website kan maken waar meteen al een standaard cms gedeelte in zit.

Ik ben al begonnen met een framework en ik maak daarbij gebruik van Zend Framework, maar nu vraag ik me het volgende af. Ik heb behoorlijk wat PHP kennis en ervaring inmiddels, maar ik heb hier geen opleiding voor gehad. Ik wil het mezelf dan ook altijd zo makkelijk mogelijk maken als ik aan het programmeren ben. Voorbeeld, als ik een databasequery wil uitvoeren dan wil ik niet een hele query in te hoeven typen, maar wil ik simpele functies kunnen gebruiken, bijvoorbeeld: $database->setTable('tabel') en $row = $database->select('naam') etc.

Ik gebruik Zend Framework met name omdat ik mooie routes kan maken, bijvoorbeeld www.mijnsite.nl/kantoorartikelen/nietmachine in plaats van www.mijnsite.nl/?category=4&product=2.

Ook vind ik het handig dat ik in Zend Framework een route makkelijk kan koppelen aan een controller en een actie. Daarnaast gebruik ik de MVC structuur (modules), de Zend_Registry functie om iets op te slaan en gebruik ik de caching functie voor het cachen van gegevens.

Ik gebruik Zend Framework dus voornamelijk voor:
- maken van mooie routes
- routes koppelen aan controller en actie
- MVC structuur (modules)
- Zend_Registry om variabelen op te slaan
- Caching

Voor de rest gebruik in Zend Framework eigenlijk niet. Ik weet dat er heeeel veel mogelijkheden in Zend Framework zitten, maar ik ben niet iemand die dat allemaal wil uitvogelen, en ik wil toch altijd graag mijn eigen code schrijven zodat ik precies weet wat de code doet en hoe deze in elkaar zit (zodat het voor mijzelf logisch is en makkelijk te gebruiken).

Nu vraag ik me 2 dingen af:
1) is het voor mij eigenlijk wel zinvol om Zend Framework te gebruiken aagezien ik er niet heel veel mogelijkheden van benut.
2) zijn de 5 functies waar ik gebruik van maak (makkelijk) ook zelf te maken of is dat heel erg ingewikkeld?

Wat raden jullie aan? Zend Framework blijven gebruiken ook al gebruik ik er maar weinig van? Of toch zelf mijn eigen functies maken en Zend Framework niet meer gebruiken? Ik stel deze vraag ook omdat Zend Framework zo'n 23mb aan serverruimte in beslag neemt.

Thanks weer Pim :)
Die test unit laat ik vooralsnog even achterwege.

Wat is het verschil tussen een container of registry?

1) MVC framework link
2) Router vervangen door betere versie zie comments
3) Database active record link
4) method chaining $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
5) Lazy registreren objecten link en Pimple


Een container (Depenency Injection Container) gebruikt (geconfigureerde) 'services' die altijd lazy geload worden en kan (vaak) ook parameters als configuratie opslaan. Een registry is volgens mij gewoon een opslag voor objecten.

<?php
// Registry
$config = new Config;

$registry = new Registry;

$pdo = new PDO($config->db_dsn);
// Configureren
$pdo->setErrorhandler($config->db_pdoErrorHandler);

$registry->pdo = $pdo;

// Container
$c = new Container;
$c->setParameters(new Config('conf.ini'));
$c->set('pdo', function($c) {
$pdo = new PDO($c->db_dsn);
$pdo->setErrorHandler($c->db_pdoErrorHandler);
return $pdo;
});
?>
De tweede kan evenveel als de eerste, is flexibeler, mooier (vind ik) en lazy.

Unit testen is niet moeilijk en het stelt je in staat te controleren of je klassen werken nadat je ze geschreven hebt, in plaats van eerst een complete applicatie te maken om er dan achter te komen dat er dingen niet werken, die je dan moet opzoeken en oplossen.
Oke, dat registry verhaal snap ik wel redelijk nu. Eigenlijk kun je dat toch ook zien als een soort geheugen (tijdens een pagina request)?

Die container snap ik nog niet helemaal. Vind het een beetje abstract en snap niet echt wat er nou eigenlijk gebeurt.

[size=xsmall]Toevoeging op 04/01/2011 11:46:40:[/size]

Pim - op 04/01/2011 11:37:10

Unit testen is niet moeilijk en het stelt je in staat te controleren of je klassen werken nadat je ze geschreven hebt, in plaats van eerst een complete applicatie te maken om er dan achter te komen dat er dingen niet werken, die je dan moet opzoeken en oplossen.
Misschien heel kort door de bocht, maar hoe kan je eigen code nou niet werken? Dan gaat er toch iets mis? Foutmelding of iets doet niet wat je verwacht?

Het is beide een opslag mechanisme voor objecten. Een container heeft echter gewoon duidelijke voordelen boven een registry. Het stelt je namelijk in staat niet alleen de objecten zelf, maar ook de koppeling tussen objecten mooi op te slaan en dat zelfs die afhankelijke objecten lazy zijn.

Over DIC

De syntax bij $c->set is nieuw in PHP5.3 en daarom niet zo bekend. Het is een anonymous functie als tweede argument. Dit is eigenlijk een factory. Die functie wordt pas geroepen bij het ophalen van de 'service'. Die anonymous functie krijgt als argument de container zelf, waardoor je de 'dependencies' of afhankelijkheden, andere services of configuratie parameters, kan gebruiken.

In de container gebeurt dan dit:
<?php
class Container {
public function get($name) {
return $this->factories[$name]($this);
}}?>
De anonieme functie wordt dus opgeslagen als variabele in de container.

Het argument $this stelt de factory functie in staat de container te gebruiken.


Het mooie van Unit Testing is dat je die foutmelding krijgt direct nadat je de klasse geschreven hebt (als je hem dan meteen Unit test, zoals het hoort) en niet pas nadat je 8 andere klassen hebt geschreven waar die klasse mee samenwerkt en die nodig zijn om het te laten functioneren. En hoe sneller je een fout ziet, hoe beter je hem op kan lossen.
Ik vind het maar lastig met die container en registries. Ik vraag em af of ik die in de praktijk ga gebruiken...

Wat kan UNIT TESTING dan wat ik zelf niet kan??
Ozzie PHP op 04/01/2011 12:08:52

Wat kan UNIT TESTING dan wat ik zelf niet kan??


Is je huiswerk altijd zonder fouten? Dat je grammaticaal correcte zinnen kan schrijven wil nog niet betekenen dat dat wat ze zeggen waar is.

Unit testing is fact checking, testen of het waar is. Als je het echt goed wilt doen schrijf je eerst de test, waarin je zet hoe je je class wilt gaan gebruiken en wat hij allemaal moet kunnen, wat je ervan verwacht. Dan implementeer je hem, en dan kijk je of dat wat je geschreven hebt doet wat je verwachtte dat het zou doen.
Jelmer rrrr op 04/01/2011 12:28:00

[quote="Ozzie PHP op 04/01/2011 12:08:52"]
Wat kan UNIT TESTING dan wat ik zelf niet kan??


Is je huiswerk altijd zonder fouten? Dat je grammaticaal correcte zinnen kan schrijven wil nog niet betekenen dat dat wat ze zeggen waar is.

Unit testing is fact checking, testen of het waar is. Als je het echt goed wilt doen schrijf je eerst de test, waarin je zet hoe je je class wilt gaan gebruiken en wat hij allemaal moet kunnen, wat je ervan verwacht. Dan implementeer je hem, en dan kijk je of dat wat je geschreven hebt doet wat je verwachtte dat het zou doen.
[/quote]

vooral om later te controleren of alles nog werkt... als je a aanpast.. werkt b dan ook nog?

Oke... ik zal me er later eens in verdiepen dan.

Hoe kun je het beste variabelen doorgeven aan een view? Gewoon via een array? Of wellicht via een object?

Dus via array:

$variables['name']

of object:

$variables->name;
Gewoon gebruiken wat jij het prettigst vind. Ik denk dat ze als argument meegeven het overzichtelijkst is, omdat dan de controller op één plek met de view communiceert, in plaats van verspreid over de actie. Doe vooral wat je zelf fijn acht, of implementeer alle opties ;)

<?php
class Controller {
public function action() {
$this->view->var = $value;
$this->view['var'] = $value;
$this->view->render('page', array('var'=>$value));
}}
?>
Hmm, oke... dan wil ik het vanuit mijn view straks zo ongeveer op deze manier kunnen aanroepen denk ik:

<?php echo $data->name; ?>

Dat vind ik wel mooi :)

Reageren