O carregamento automático é um conceito em PHP onde você especifica um diretório ou diretórios para carregar classes. Isso é muito mais benéfico do que usar require ou include para carregar classes. Também é um requisito para usar pacotes do Composer.
require
include
Por padrão, qualquer classe Flight é carregada automaticamente graças ao Composer. No entanto, se você deseja carregar suas próprias classes, pode usar o método Flight::path() para especificar um diretório para carregar classes.
Flight
Flight::path()
Vamos assumir que temos uma estrutura de diretórios como a seguinte:
# Caminho de Exemplo /home/user/project/my-flight-project/ ├── app │ ├── cache │ ├── config │ ├── controllers - contém os controladores para este projeto │ ├── translations │ ├── UTILS - contém classes apenas para esta aplicação (tudo em maiúsculas de propósito para um exemplo posterior) │ └── views └── public └── css └── js └── index.php
Você pode especificar cada diretório a ser carregado da seguinte maneira:
/** * public/index.php */ // Adicionar um caminho ao carregador automático Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); /** * app/controllers/MyController.php */ // sem necessidade de namespace // Todas as classes carregadas automaticamente são recomendadas a serem em Pascal Case (cada palavra capitalizada, sem espaços) // A partir da versão 3.7.2, você pode usar Pascal_Snake_Case para os nomes de suas classes executando Loader::setV2ClassLoading(false); class MyController { public function index() { // fazer algo } }
Se você tiver namespaces, na verdade se torna muito fácil implementar isso. Você deve usar o método Flight::path() para especificar o diretório raiz (não o diretório do documento ou pasta public/) de sua aplicação.
public/
/** * public/index.php */ // Adicionar um caminho ao carregador automático Flight::path(__DIR__.'/../');
Agora, veja como seu controlador poderia ser. Observe o exemplo abaixo, mas preste atenção aos comentários para informações importantes.
/** * app/controllers/MyController.php */ // namespaces são necessários // os namespaces são iguais à estrutura de diretórios // os namespaces devem seguir o mesmo padrão de caso que a estrutura de diretórios // os namespaces e diretórios não podem ter nenhum sublinhado (a menos que Loader::setV2ClassLoading(false) seja definido) namespace app\controllers; // Todas as classes carregadas automaticamente são recomendadas a serem em Pascal Case (cada palavra capitalizada, sem espaços) // A partir da versão 3.7.2, você pode usar Pascal_Snake_Case para os nomes de suas classes executando Loader::setV2ClassLoading(false); class MyController { public function index() { // fazer algo } }
E se você quiser carregar automaticamente uma classe em seu diretório de utils, você faria basicamente a mesma coisa:
/** * app/UTILS/ArrayHelperUtil.php */ // o namespace deve corresponder à estrutura de diretórios e caso (observe que o diretório UTILS está todo em maiúsculas // como na árvore de arquivos acima) namespace app\UTILS; class ArrayHelperUtil { public function changeArrayCase(array $array) { // fazer algo } }
A partir da versão 3.7.2, você pode usar Pascal_Snake_Case para os nomes de suas classes executando Loader::setV2ClassLoading(false);. Isso permitirá que você use sublinhados em seus nomes de classe. Isso não é recomendado, mas está disponível para aqueles que precisam.
Loader::setV2ClassLoading(false);
/** * public/index.php */ // Adicionar um caminho ao carregador automático Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); Loader::setV2ClassLoading(false); /** * app/controllers/My_Controller.php */ // sem necessidade de namespace class My_Controller { public function index() { // fazer algo } }