O Composer (https://getcomposer.org/) é um gerenciador de dependências (pacotes) muito utilizado na linguagem PHP e que fornece muitas facilidades, uma vez que ele fica responsável por verificar, baixar a acoplar ao nosso projeto todas as “libs” de terceiros que iremos precisar.
Essas “libs”, quando baixadas pelo Composer, são agrupadas dentro de um diretório chamado “vendor”. Além disso, é criado também nessa pasta um arquivo chamado “autoload.php”, responsável por “carregar” todas as classes que precisarmos usar. Basicamente, basta eu importar o “autoload.php” em um arquivo do meu projeto e eu terei acesso a todas as classes das “libs” baixadas pelo Composer.
Bom, apesar das tantas praticidades que encontramos quando optamos por utilizar o Composer para auxílio no desenvolvimento dos nossos projetos, uma dúvida que surge é: como ter um “autoload” fácil também para importar as classes do próprio projeto (que são aquelas que nós mesmos desenvolvemos e que, portanto, não estão dentro da pasta “vendor”) ?.
Antes de mostrar como resolver facilmente esse problema, vamos pensar na seguinte estrutura de pastas para um projeto hipotético:
- src
- Config
- Database
- Models
- etc…
- public
- css
- js
- img
- etc….
- vendor
Bom. Então, basicamente, temos a pasta “src“, onde criamos as classes do próprio projeto, que são particulares a ele. Na pasta “public“, colocamos nossos arquivos “assets”, como imagens, javascripts e etc… E na pasta “vendor“, obviamente, estão as “libs” importadas pelo Composer.
Como vimos alguns parágrafos acima, quando queremos importar uma classe, a gente chama (include) o arquivo “vendor/autoload.php” e depois instancia as classes através de seus “namespaces“. Mas e quando queremos importar/utilizar uma classe que nós mesmos criamos (dentro de alguma subpasta do “src”)? O “autoload” está configurado para buscar as classes dentro do “vendor”, mas podemos adicionar uma configuração para poder também adicionar a pasta “src” na hora de fazer essa busca.
Vamos supor que o padrão de “namespace” de classes do meu projeto é o seguinte:
Arquivo: “Models/BaseModel.php”
Namespace: “ProjetoHipotetico\Models\BaseModel”
Sendo assim, basta que eu vá até o arquivo “composer.json“, que fica na raiz do seu projeto e adicionar os namespaces/pastas que devem ser consideradas pelo “autoload”:
1 2 3 4 5 6 7 8 | { "autoload": { "psr-4": { "ProjetoHipotetico\\" : "src/", "Vendor\\Namespace\\" : "" } } } |
Na linha 4 adicionamos a pasta do nosso projeto que abriga as nossas classes e na linha 5 é a busca “default” dentro das “libs” da pasta “vendor”.
Depois que fizer essa alteração, não se esqueça de salvar o arquivo “composer.json” e dar um “composer update” no seu console.
A partir de agora o “autoload.php” servirá tanto para importar as classes instaladas pelo Composer como também para importar as classes que você mesmo desenvolveu para o projeto. Simples e fácil.
Espero que essa fica te ajude =)
Abs!