Bestanden inladen use instellen in service container
Write Down
16/08/2012 18:54:04Hi!
Ik ben momenteel aan het experimenteren met mijn service container. Deze is gebaseerd op die van Pim uit zijn tutorial Dependency Injection.
Werkt prima, alleen, de simpele test die ik nu doe, legt al een gebrek bloot. Ik maak gebruik van namespaces, en daar begint het probleem. Als voorbeeld volgende code:
Zoals je ziet dien ik bij de class naam de hele namespace mee te geven, wil ik het werken hebben. Ik dacht dit kunnen op te lossen door bovenaan een use toe te voegen en dan gewoon FileLog te schrijven. Niet dus, werkt niet: class not found.
Dat is dus het eerste probleem dat ik wens op te lossen. Verder dacht ik nog een extra klasse te maken, een autoloader. Deze zou ik dan meegeven aan de constructor van de container klasse. Zodanig dat de namespaces correct worden aangemaakt (moet ik eerst wel weten hoe) en dat de benodigde bestanden geladen worden (require).
Alleen, hoe in godsnaam zou ik ervoor kunnen zorgen dat de autoloader ook nog eens alle namespaces (en bijgevolg ook de bestand locaties) kan voorspellen?
Ik hoop dat mijn uitleg min of meer duidelijk is. Al vrees ik er voor haha :-)
Ik ben momenteel aan het experimenteren met mijn service container. Deze is gebaseerd op die van Pim uit zijn tutorial Dependency Injection.
Werkt prima, alleen, de simpele test die ik nu doe, legt al een gebrek bloot. Ik maak gebruik van namespaces, en daar begint het probleem. Als voorbeeld volgende code:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$c = new Container;
$c->set('log.class', 'E\Core\Log\FileLog');
$c->set('log.destination', 'test.log');
$c->set('log', function($c) {
$class = $c->get('log.class');
$log = new $class($c->get('log.destination'));
return $log;
}, true);
$c->set('log.class', 'E\Core\Log\FileLog');
$c->set('log.destination', 'test.log');
$c->set('log', function($c) {
$class = $c->get('log.class');
$log = new $class($c->get('log.destination'));
return $log;
}, true);
Zoals je ziet dien ik bij de class naam de hele namespace mee te geven, wil ik het werken hebben. Ik dacht dit kunnen op te lossen door bovenaan een use toe te voegen en dan gewoon FileLog te schrijven. Niet dus, werkt niet: class not found.
Dat is dus het eerste probleem dat ik wens op te lossen. Verder dacht ik nog een extra klasse te maken, een autoloader. Deze zou ik dan meegeven aan de constructor van de container klasse. Zodanig dat de namespaces correct worden aangemaakt (moet ik eerst wel weten hoe) en dat de benodigde bestanden geladen worden (require).
Alleen, hoe in godsnaam zou ik ervoor kunnen zorgen dat de autoloader ook nog eens alle namespaces (en bijgevolg ook de bestand locaties) kan voorspellen?
Ik hoop dat mijn uitleg min of meer duidelijk is. Al vrees ik er voor haha :-)
PHP hulp
28/11/2024 17:53:16Write Down
17/08/2012 19:10:51Bump!
Even kleine aanvulling, alle onderdelen staan dus werkelijk ook in aparte mappen. Bijvoorbeeld FileLog staat in lib/E/Core/Log. Database.php vind je terug in lib/E/Core/Database, ...
Even kleine aanvulling, alle onderdelen staan dus werkelijk ook in aparte mappen. Bijvoorbeeld FileLog staat in lib/E/Core/Log. Database.php vind je terug in lib/E/Core/Database, ...