Autoloading a Zend Framework 1.8
V nové verzi Zend Frameworku 1.8 došlo k významné změně v práci s automatickým nahráváním tříd do projektu. Dříve jsme byli zvyklí, že na začátku bootstrapu se zavolala metoda Zend_Loader::registerAutoload()
, která dokázala nahrávat třídy s přesně daným prefixem za nás. Tato možnost je i v nové verzi k dispozici, je však označena jako zavržená a ve verzi 2.0 bude definitivně odstraněna.
V nové verzi Zend Frameworku máme k dispozici třídu Zend_Loader_Autoload
, která je implementací rozhraní Zend_Loader_Autoload_Interface
s jedinou povinnou metodou autoload()
. Tato třída je singleton, v souladu s konvencemi pojmenování má tedy i dostupnou metodu getInstance()
.
Při vytvoření instance se zaregistrují prefixy Zend_
a ZendX_
pro knihovny Zend Frameworku. Chcete-li zaregistrovat vlastní jmenný prostor, pak použijete metodu registerNamespace()
. Při registraci v tomto případě použijte i podtržítko.
<?php
$instance = Zend_Loader_Autoloader::getInstance();
$instance->registerNamespace(‚Interval_‘);
Pokud nyní zavoláte např. třídu Interval_Class
, pak se bude hledat soubor Interval/Class.php uvnitř cest, které jste nastavili přes funkci set_include_path()
před voláním autoloadu.
Někdy se stane, že použijete v projektu třídu nebo knihovnu jiného frameworku, který nesplňuje konvence Zend Frameworku, má však definován vlastní autoload pro nahrávání tříd. Tehdy se vám bude hodit metoda pushAutoloader()
. Jako první parametr se předá metoda autoloaderu a jako druhý parametr prefix, pro který se autoload použije.
<?php
$instance->pushAutoloader(array(‚ezcBase‘, ‚autoload‘), ‚ezc‘);
$graph = new ezcGraphPieChart();
$graph->title = ‚Access statistics‘;
Nový autoloader obsahuje několik dalších zajímavých metod. Metoda unshiftAutloader()
je alternativa k pushAutoloader()
, která přidá předaný autoloader na první místo. Budete-li tedy mít již autoloader pro daný jmenný prostor a budete chtít před ním volat jiný autoloader, použijete tuto metodu.
Metoda suppressNotFoundWarnings()
nastavuje, zda nevyhodit výjimku v případě, že se danou třídu nepodaří nahrát (ve výchozí podobě je tato volba zapnutá, tzn., že pokud dojde k vyhození výjimky při nahrávání třídy, bude potlačena).
Pokud chceme použít autoloader pro jakýkoliv jmenný prostor, pak nám pomůže metoda setFallbackAutoloader()
. Taková volba se hodí např. pro nahrávání tříd z PEAR knihovny, která nemá jednotný jmenný prostor.
Někdy se stane, že umístění tříd, které bychom chtěli nahrát do projektu přesně nesplňují namapování v hieararchie adresářu k jejich názvům. V takovém případě je vám k dispozici třída Zend_Loader_Autoloader_Resource
, která je rovněž implementací rozhraní pro autoloadery.
Jako příklad si uveďme nahrávání modelů a formulářů. Každý model i formulář je samostatná třída umístěná uvnitř adresáře models nebo forms. Oba tyto adresáře jsou pak uvnitř nějaké cesty /cesta/k/adresari/. Formulář pro editaci uživatele chceme umístit do adresáře /cesta/k/adresari/forms/Uzivatel.php a chceme, aby třída měla název Interval_Form_Uzivatel
.
Nejprve vytvořte instanci autoloadu, zaregistrujte cestu (volba basePath
) a určete jmenný prostor (volba namespace
):
<?php
$instance = new Zend_Loader_Autoloader_Resource(array(
‚basePath‘ => ‚cesta/k/nejakemu/aresari‘,
‚namespace‘ => ‚Interval‘,
));
Následně zaregistrujte typ nahrávaného souboru (v našem případě forms a models):
<?php
$instance->addResourceTypes(array(
‚form‘ => array(
‚path‘ => ‚forms/‘,
‚namespace‘ => ‚Form‘,
),
‚model‘ => array(
‚path‘ => ‚models/‘,
),
));
Nakonec ještě dodejme, že verze 1.8 obsahuje mimo jiné i knihovnu Zend_Application a její třídu Zend_Application_Module_Autoloader
, která přednastavuje různé typy podle doporučené struktury aplikace postavené na Zend Frameworku (dbTable, form, model, plugin, service, viewhelper, viewfilter).
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
inPage AI: Jak na generování obsahu
18. července 2024 -
Jak se chránit před podvody na internetu – část 2
14. října 2024 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024