Bestanden inladen use instellen in service container

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Write Down

Write Down

16/08/2012 18:54:04
Quote Anchor link
Hi!

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);


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

PHP hulp

28/11/2024 17:53:16
 
Write Down

Write Down

17/08/2012 19:10:51
Quote Anchor link
Bump!

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, ...
 



Overzicht Reageren

 
 

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.