Como definir o caminho para autoload.php com o compositor
-
21-12-2019 - |
Pergunta
Eu tenho um projeto de compositor, chame-o MyVendor\Database
.Esse projeto usa compositor e carregamento automático.Existem vários arquivos nesse projeto que possuem:
require_once __DIR__."/../vendor/autoload.php";
para utilizar o carregamento automático.
Tudo funciona muito bem, até eu incluir MyVendor\Database
em outro projeto.
Eu tenho outro projeto, ligue MyVendor\CoolPackage
isso requere MyVendor\Database
.
Eu executo o compositor install em CoolPackage
e ele baixa MyVendor\Database
na pasta do fornecedor.
O problema daqui, porém, é Meus arquivos dentro vendor\MyVendor\Database
falhar porque eles ligam require_once __DIR__."/../vendor/autoload.php"
, mas não há pasta de fornecedor dentro de \vendor\MyVendor\Database
.
Solução
Na tua composer.json
você define o esquema de carregamento automático.Por motivos que você mesmo descobriu agora, não é uma boa ideia chamar o carregamento automático do Composer dentro de qualquer um dos arquivos que deveriam ser carregáveis automaticamente, não apenas dentro desse aplicativo ou módulo, mas também em qualquer outro aplicativo.
Basicamente, os arquivos em qualquer projeto do Composer devem ser divididos com base na definição de carregamento automático PSR-0 ou 4:Eles APENAS fazem declaração de classes ou funções SEM quaisquer efeitos colaterais (como execução de código) ou executam código sem definir classes ou funções.Somente os arquivos anteriores podem ser carregados automaticamente (com exceção das funções, que só poderiam ser sempre declaradas carregando o arquivo que os contém com um files
seção de carregamento automático), este último NÃO deve ser carregado automaticamente.
E então deve se tornar relativamente fácil:Todas as classes que podem ser carregadas automaticamente também podem ser utilizadas quando este componente é incluído em outra aplicação.Qualquer outra coisa que não seja uma classe não pode ser usada diretamente.