Instalando e configurando o Composer com a PSR-4
janeiro 18, 2017 Deixe um comentário
Olá pessoal!
Este post vai para quem tem dificuldade (assim como eu) em instalar e configurar o Composer com a PSR-4.
fonte: https://mastigado.wordpress.com
Para quem não sabe as “PSRs” do PHP são a grosso modo um conjunto de boas práticas para padronizar frameworks e acredito que também sirva para nossos próprios apps. Esse conjunto de PSRs foi criado por uma organização chamada PHP-FIG (http://www.php-fig.org/) e existem até hoje cerca de 18 delas.
Neste post trato especificamente de como configurar o Composer e a inserção da PSR-4 que é responsável pelo autoload dos arquivos do PHP. Este “autoload” é útil para que carreguemos nossos arquivos sem ter de ficar utilizando o método require_once ou require do PHP. E por que utilizar a PSR-4? Bem, a PSR-4 substituiu a PSR-0 que também é responsável pelo autoload dos arquivos, mas que entrou em estado deprecated.
Pois bem e o Composer? Bem, o Composer é um gerenciador de dependências do PHP que funciona como um gerenciador de pacotes, assim como o nuget do C#, o Apt do Debian, o Yum do Fedora/Cent-OS e por aí vai.
Download do Composer
Para baixarmos o Composer podemos seguir as orientações de seu próprio site no endereço https://getcomposer.org/download/ e seguir as instruções (caso as que eu coloquei abaixo estejam desatualizadas), porém antes execute as seguintes que estão enumeradas abaixo.
- Se estiver no Linux abra o terminal, entre na raiz de seu projeto (se for no Windows, tente usando o prompt);
- Crie um diretório com o nome public;
- Coloque seu arquivo index.php dentro deste diretório public;
- Ainda na raiz do projeto crie dois diretórios, um chamado de vendor e outro de app;
- Dentro do diretório vendor crie de preferência um diretório com o nome de sua instituição, pode ser minhaempresa (ou pense em outro nome que caracterize essa idéia);
- E dentro do diretório app crie uma classe chamada de Init.php com o conteúdo abaixo.
Init.php
<?php namespace app; class Init { public function __construct() { echo "Ok. It works!"; } }
E agora, dentro da pasta raiz de seu projeto, execute as linhas abaixo no terminal (uma de cada vez). Lembrando que o comando php no início de cada linha está pressupondo que você já tem o seu diretório mapeado no PATH de sua máquina (se você não sabe o que é PATH, recomendo ler este post que fiz sobre isso e outro post que fiz sobre como configurá-lo), caso contrário escreva o caminho completo antes de executar o comando (no Linux pode ser algo assim: /opt/php7/bin/php e no Windows algo como isto: C:XamppPHP7binphp.exe).
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');"
Arquivo composer.json
Vou deixar algumas observações sobre o conteúdo deste arquivo que servirá de base para a configuração do Composer.
Basicamente esta área abaixo está reservada para que você defina a partir de qual versão do PHP será instalada em sua máquina, quais serão os pacotes que são requeridos na instalação e o mínimo de tipo de versão aceitável do aplicativo.
"name": "meuapp/developer", "require": { "php": ">=7.3.5" }, "require-dev": { "phpunit/phpunit": "8.2.5@stable", "squizlabs/php_codesniffer": "dev-master" }, "minimum-stability": "alpha",
Já a área onde tratamos da PSR-4, responsável pelo carregamento da estrutura de arquivos de nossa aplicação terá este raciocínio:
A raiz do meu projeto PHP é composta por um diretório que se chama meuapp e lá dentro tenho as pastas app, public e vendor, sendo que dentro de vendor tenho um diretório chamado de minhaempresa. Portanto quando defino o mapeamento das minhas classes na definição da PSR-4 sempre tenho que me referir ao que está dentro da raiz de meu projeto (no caso a pasta meuapp). Na primeira linha de mapeamento (do script abaixo) deixei o código assim: “minhaempresa\” : “vendor/minhaempresa” porque estou dizendo que quero mapear a pasta minhaempresa que está no caminho vendor -> minhaempresa e que por consequência está dentro de meuapp, contudo para ser mais específico, o mapeamento omite a pasta meuapp na nomenclatura, mas na prática ele quer dizer isso: meuapp/vendor/minhaempresa. O mesmo raciocínio se aplica para a linha de mapeamento do diretório app que em outras palavras que dizer meuapp/app. Tenham bastante atenção nisso, pois é algo simples que me fez perder um tempo considerável para entender (2 dias refletindo sob o calor da rua e do altamente gelado ar condicionado do meu serviço) , então se alguém tiver dúvida poste aqui.
"autoload": { "psr-4": { "minhaempresa\\" : "vendor/minhaempresa", "app\\" : "app" } },
Agora, o próximo passo é criar na raiz de sua aplicação um arquivo chamado composer.json e coloque dentro dele o conteúdo abaixo.
{ "name": "meuapp/developer", "require": { "php": ">=7.3.5" }, "require-dev": { "phpunit/phpunit": "8.2.5@stable", "squizlabs/php_codesniffer": "dev-master" }, "minimum-stability": "alpha", "authors": [{ "name": "Minha Empresa", "email": "developer@minhaempresa.com.br" }], "autoload": { "psr-4": { "minhaempresa\\" : "vendor/minhaempresa", "app\\" : "app" } }, "config": { "bin-dir": "bin" } }
Sobre Deprecation em package name
Recentemente tentei instalar o composer como informado mais abaixo, porém sua versão 2.0 diz que é preciso alterar a nomenclatura do package name. Isso já foi neste post no valor “minhaempresa/developer”, tive de inserir um caractere / aí no meio para não dar problema, portanto fiquem tranquilos.
Deprecation warning: Your package name minharempresa is invalid, it should have a vendor name, a forward slash, and a package name. The vendor and package name can be words separated by -, . or _. The complete name should match “[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9]([_.-]?[a-z0-9]+)*”. Make sure you fix this as Composer 2.0 will error.
Sobre o arquivo composer.phar
Após baixado o Composer, um arquivo de nome composer.phar é criado e é ele que iremos executar para a configuração do composer
php composer.phar install
Os comandos abaixo são opcionais, portanto não precisam ser executados
php composer.phar install --no-plugins --no-scripts ... php composer.phar update --no-plugins --no-scripts ...
Conteúdo do arquivo index.php
Dentro do arquivo index.php você deverá colocar o conteúdo abaixo:
<?php require_once '../vendor/autoload.php'; use app\Init; $init = new Init;
A partir de uma única chamada para o arquivo autoload.php feita no index.php não precisaremos mais utilizar o comando require_once em nenhum lugar de nosso app quando precisarmos instanciar alguma classe ou outro contido na definição da PSR-4 no arquivo composer.json.
E para finalizar, execute o servidor PHP embutido (dentro do diretório onde está o seu arquivo index.php) que você já tem na sua instalação do PHP.
Se estiver rodando na máquina local use este comando:
php -S 127.0.0.1:8080
Senão, coloque o ip dela, execute e acesse de outra máquina.
php -S 192.168.92.128:8080
O resultado tem que ser a impressão na tela da mensagem contida no construtor da classe Init.
Pronto! Tá aí mastigado.
fonte: https://mastigado.wordpress.com
fonte: https://getcomposer.org/doc/04-schema.md
fonte: http://pt.stackoverflow.com/questions/19200/composer-autoload-e-psr-0-vs-psr-4
fonte: http://www.douglaspasqua.com/2015/01/26/php-autoload-psr-4psr-0-com-composer/
fonte: https://getcomposer.org/doc/01-basic-usage.md
fonte: https://seld.be/notes/psr-4-autoloading-support-in-composer
fonte: https://github.com/pavlakis/psr4-with-composer
fonte: http://www.php-fig.org/psr/psr-4/meta/
fonte: https://seld.be/notes/psr-4-autoloading-support-in-composer
fonte: https://getcomposer.org/doc/faqs/how-to-install-untrusted-packages-safely.md
//PSR-4 com Testes
fonte: http://culttt.com/2014/05/07/create-psr-4-php-package/
Comentários