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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top