Skip to content
Mateus Mercer edited this page Nov 1, 2016 · 16 revisions

O composer é uma excelente ferramenta disponível para usuários e desenvolvedores de PHP, ele permite que sejam instalados pacotes (bibliotecas, frameworks, classes, etc.) com comandos simples.

Pré-requisitos (para composer e o NFePHP)

apt-get install curl php5 php5-cli php5-gd php5-curl php5-mcrypt php5-xdebug git-core 

Para instalar eu recomendo a instalação GLOBAL, dessa forma podemos ter várias aplicações em diferentes repositórios (ou pastas) usando um mesmo instalador (composer.phar). Para instalar globalmente execute como root:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Periodicamente você terá que atualizar esse arquivo do composer para isso é só executar, como root:

composer self-update

Muito bem, com o composer instalado vamos fazer uso dele em nossas aplicações. O composer possui uma enorme lista de pacotes a serem instalados e pode ser vista em Packagist para usar qualquer um desses pacotes você tem apenas que criar um arquivo denominado "composer.json", coloca-lo na raiz de seu sistema e executar:

composer install

Esse comando irá baixar e instalar todos os pacotes e suas dependências na pasta "vendor" e montar um arquivo "autoload.php" para permitir a localização automática de todas as classes. É isso mesmo, não será mais necessário nenhum "include" ou "require" em sua aplicação apenas um "use".

Quando você executar o comando acima, será criado também um arquivo composer.lock, na mesma pasta raiz, que será usado para as próximas atualizações dos pacotes (ou seja a próxima vez que usar o composer). Uma vez que os pacotes estejam carregados na pasta vendor e você quiser atualizar é só executar:

composer update

Caso hajam atualizações o sistema irá perguntar o deve fazer, se atualiza ou não o pacote, etc.

Configuração

Bom já vimos a parte básica, mas para que isso funcione necessitamos do arquivo composer.json. Esse arquivo não é tão simples, mas também não é nenhum monstro. Existem vários tutoriais na internet sobre como monta-lo, segue um exemplo:

{
	"name": "robmachado/hermes",
	"description": "hermes devel",
	"keywords": ["hermes", "devel"],
	"license": "MIT",
	"type": "project",
	"require": {
		"laravel/framework": "5.0.*",
		"nfephp-org/nfephp": "dev-develop"
	},
	"require-dev": {
		"phpunit/phpunit": "~4.0",
		"phpspec/phpspec": "~2.1"
	},
	"autoload": {
		"classmap": [
			"database"
		],
		"psr-4": {
			"robmachado\\hermes\\": "app/"
		}
	},
	"autoload-dev": {
		"classmap": [
			"tests/TestCase.php"
		]
	},
	"scripts": {
		"post-install-cmd": [
			"php artisan clear-compiled",
			"php artisan optimize"
		],
		"post-update-cmd": [
			"php artisan clear-compiled",
			"php artisan optimize"
		],
		"post-create-project-cmd": [
			"php -r \"copy('.env.example', '.env');\"",
			"php artisan key:generate"
		]
	},
	"config": {
		"preferred-install": "dist"
	}
}

O que mais interessa nesse arquivo são os campos "require" e "autoload" que vão definir os pacotes e como serão encontrados pelo autoload.

A partir da instalação todo o conteúdo da pasta "vendor" fica disponível para o uso de seu sistema, e não haverá repetição ou duplicação de pacotes (ou classes). Voce deve atentar para os possíveis erros devido a incompatibilidades de pacotes e garantir que apenas utilize os que são compatíveis entre si.

Então para usar a API NFePHP em sua versão develop é só incluir no require:

"require": {
		"nfephp-org/nfephp": "dev-develop"
	},

Vamos dizer que agora você quer usar o TCPDF do Nicola Asuni em sua aplicação, como seria feito ?

"require": {
    "tecnick.com/tcpdf": "dev-master"
},

Após colocar o pacote desejado no composer.json é só executar novamente:

composer update

Próximo "Como usar o autoload"