PHP 8.4.2 Released!

A classe Yaf_Loader

(Yaf >=1.0.0)

Introdução

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"
Supondo que o seguinte namespace local esteja registrado:

Exemplo #2 Registrando namespace local

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function
_initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
A seguir, exemplos de carregamento automático:

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/
Yaf identifica o sufixo de uma classe (isto é padrão, o sufixo pode ser alterado pela configuração yaf.name_suffix) para decidir se é uma classe MVC:

Exemplo #6 Distinções de classes MVC

Controller Classes =>
    // ***Controller

Model Classes =>
    // ***Model

Plugin Classes =>
    // ***Plugin
Alguns exemplos:

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

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/".

Além disso, o diretório será afetado por yaf.lowcase_path.

Resumo da classe

class Yaf_Loader {
/* Propriedades */
protected $_local_ns;
protected $_library;
protected $_global_library;
static $_instance;
/* Métodos */
private __construct()
public autoload(): void
public static getInstance(): void
public getLibraryPath(bool $is_global = false): Yaf_Loader
public getNamespacePath(string $namespaces): string
public getNamespaces(): array
public static import(): void
public isLocalName(): void
public registerNamespace(string|array $namespaces, string $path = ?): bool
public setLibraryPath(string $directory, bool $is_global = false): Yaf_Loader
}

Propriedades

_local_ns

_library

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()

_global_library

_instance

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top