Composer: como fazer o autoload de classes php fora do “vendor”

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!

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado.