(Yaf >=1.0.0)
Yaf_Loader introduz uma solução compreensiva de carregamento automático para o Yaf.
Na primeira vez que uma instância de Yaf_Application for recuperada, Yaf_Loader instanciará um singleton e se registrará com spl_autoload. Uma instância é recuperada usando Yaf_Loader::getInstance().
Yaf_Loader tenta carregar uma classe em apenas uma tentativa.
Se falhar, dependerá de yaf.use_spl_autoload. Se esta
configuração estiver ativada, Yaf_Loader::autoload() retornará
false
, dando assim a chance para outra função de carregamento automático. Se estiver desligada
(por padrão), Yaf_Loader::autoload() retornará
true
e o mais importante é que um alerta será acionado
(muito útil para descobrir por que uma classe não pôde ser carregada).
Nota:
A configuração yaf.use_spl_autoload deve ser mantida desativada, a menos que haja alguma biblioteca com seu próprio mecanismo de carregamento automático e seja impossível reescrevê-lo.
Por padrão, Yaf_Loader assume que todas as bibliotecas (script definido por classe) são armazenadas no diretório de biblioteca global, que é definido no php.ini (yaf.library).
Se for desejado que o Yaf_Loader pesquise algumas classes (bibliotecas) no diretório de classes local (que é definido no application.ini e por padrão é application.directory . "/library"), o prefixo da classe deve ser registrado usando Yaf_Loader::registerLocalNameSpace().
Vejamos alguns exemplo (assumindo que APPLICATION_PATH seja application.directory):
Exemplo #1 Exemplo de configuração
// Assumindo a configuração a seguir no php.ini: yaf.library = "/global_dir" // Assumindo a configuração a seguir no application.ini application.library = APPLICATION_PATH "/library"
Exemplo #2 Registrando namespace local
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function _initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
Exemplo #3 Exemplo de carregamento de classe
class Foo_Bar_Test => // APPLICATION_PATH/library/Foo/Bar/Test.php class GLO_Name => // /global_dir/Glo/Name.php class BarNon_Test // /global_dir/Barnon/Test.php
Exemplo #4 Exemplo de carregamento de classe de namespace
class \Foo\Bar\Dummy => // APPLICATION_PATH/library/Foo/Bar/Dummy.php class \FooBar\Bar\Dummy => // /global_dir/FooBar/Bar/Dummy.php
Observe que todos os diretórios têm a primeira letra maiúscula. Eles podem ficar em letras minúsculas definindo yaf.lowcase_path para "On" no php.ini.
Yaf_Loader também é projetado para carregar as classes MVC, e a regra é:
Exemplo #5 Exemplo de carregamento de classes MVC
Controller Classes => // APPLICATION_PATH/controllers/ Model Classes => // APPLICATION_PATH/models/ Plugin Classes => // APPLICATION_PATH/plugins/
Exemplo #6 Distinções de classes MVC
Controller Classes => // ***Controller Model Classes => // ***Model Plugin Classes => // ***Plugin
Exemplo #7 Exemplo de carregamento MVC
class IndexController // APPLICATION_PATH/controllers/Index.php class DataModel => // APPLICATION_PATH/models/Data.php class DummyPlugin => // APPLICATION_PATH/plugins/Dummy.php class A_B_TestModel => // APPLICATION_PATH/models/A/B/Test.php
Além disso, o diretório será afetado por yaf.lowcase_path.Nota:
A partir do Yaf 2.1.18, é oferecido suporte ao carregamento automático de controladores para o lado do script do usuário (isto é, o carregamento automático é acionado pelo script PHP do usuário, por exemplo: acessar uma propriedade estática do controlador no Bootstrap ou em Plugins), mas o carregador automático apenas tenta localizar o script da classe do controlador sob o pasta padrão do módulo, que é "APPLICATION_PATH/controllers/".
Por padrão, este valor é application.directory . "/library". Ele pode ser alterado no application.ini (application.library) ou com uma chamada a Yaf_Loader::setLibraryPath()