O minicurso apresentado durante o evento FLISOL (Festival Latino-americano de Instalação de Software Livre) 2015, em São Carlos/SP, demonstra como é possível criar e disponibilizar pacotes em PHP com Composer, usando o padrão PSR-4 definido pelo PHP Framework Interop Group, através do repositório GitHub e Packagist.
2. Thiago Henrique Poiani
Mestrando em Ciências da
Computação
Especialização em
Desenvolvimento de Software
para Web
Tecnologia em Análise e
Desenvolvimento de Sistemas
5. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Apresentações
http://bit.ly/
flisol-2015-disponibilizando-dependencias-php
6. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☐ Controle de Versão
☐ Git
☐ Gerenciamento de Dependências
☐ Composer
☐ PHP
☐ FIG ☐ PSR-4
☐ Disponibilizar dependência
☐ GitHub ☐ Packagist
7. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☐ Controle de Versão
☐ Git
☐ Gerenciamento de Dependências
☐ Composer
☐ PHP
☐ FIG ☐ PSR-4
☐ Disponibilizar dependência
☐ GitHub ☐ Packagist
8. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Controle de Versão
Concurrent Version System
Subversion
Mercurial
Git
9. Controle de Versão
Stack Overflow. Why Should I Use Version Control?. Disponível em: http://stackoverflow.com/a/1408464
18. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☒ Controle de Versão
☒ Git
☐ Gerenciamento de Dependências
☐ Composer
☐ PHP
☐ FIG ☐ PSR-4
☐ Disponibilizar dependência
☐ GitHub ☐ Packagist
19. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências
Controle da versão da dependência
Dependências apenas para desenvolvimento
Padronização da estrutura do projeto
Não reinventar a roda
26. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências - Composer
vendor/
pasta com as dependências
vendor/autoload.php
função responsável por realizar o __autoload
vendor/composer/autoload_*
definição dos namespaces
27. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências - Composer
Como uso a dependência instalada?
require("vendor/autoload.php");
28. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
index.php
<?php
require("vendor/autoload.php");
echo 'Hello World';
?>
Gerenciamento de Dependências - Composer
29. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências - Composer
require("vendor/autoload.php");
use SymfonyComponentTranslationTranslator;
use SymfonyComponentTranslationLoaderArrayLoader;
30. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências - Composer
$translator = new Translator(null);
$translator->addLoader('array', new ArrayLoader());
$translator->addResource('array',
array('Hello World' => 'Olá Mundo'), 'pt'
);
$translator->addResource('array',
array('Hello World' => 'Hola Mundo'), 'es'
);
31. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências - Composer
echo $translator->trans('Hello World');
33. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
$ php index.php
$ php index.php pt
$ php index.php es
Gerenciamento de Dependências - Composer
34. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
$ git status
Gerenciamento de Dependências - Composer
35. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Gerenciamento de Dependências - Composer
Deixe a pasta vendor/ fora do seu
repositório
.gitignore
vendor/
36. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
$ git status
$ git add --all
$ git commit -m "i18n"
$ git push origin master
Gerenciamento de Dependências - Composer
37. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☒ Controle de Versão
☒ Git
☒ Gerenciamento de Dependências
☒ Composer
☐ PHP
☐ FIG ☐ PSR-4
☐ Disponibilizar dependência
☐ GitHub ☐ Packagist
38. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
PHP
5.3
Namespace are a way of encapsulating
items.
PHP Manual. Namespaces overview. Disponível em: http://php.net/manual/en/language.namespaces.rationale.
php
39. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☒ Controle de Versão
☒ Git
☒ Gerenciamento de Dependências
☒ Composer
☒ PHP
☐ FIG ☐ PSR-4
☐ Disponibilizar dependência
☐ GitHub ☐ Packagist
40. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
PHP - FIG
PHP Framework Interop Group
PSR-0 Autoloading Standard
PSR-1 Basic Coding Standard
PSR-2 Coding Style Guide
PSR-3 Logger Interface
PSR-4 Improved Autoloading
PHP-FIG — PHP Framework Interop Group. Disponível em: http://www.php-fig.org/
41. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
PHP - FIG
PHP Framework Interop Group
PSR-0 Autoloading Standard
PSR-1 Basic Coding Standard
PSR-2 Coding Style Guide
PSR-3 Logger Interface
PSR-4 Improved Autoloading
PHP-FIG — PHP Framework Interop Group. Disponível em: http://www.php-fig.org/
42. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☒ Controle de Versão
☒ Git
☒ Gerenciamento de Dependências
☒ Composer
☒ PHP
☒ FIG ☐ PSR-4
☐ Disponibilizar dependência
☐ GitHub ☐ Packagist
44. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
PHP PSR-4
Namespace
<?php
<NamespaceName>(<SubNamespaceNames>)*<ClassName>
use SymfonyComponentTranslationTranslator;
45. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
PHP PSR-4
Namespace
<?php
<NamespaceName>(<SubNamespaceNames>)*<ClassName>
use SymfonyComponentTranslationTranslator;
/vendor/symfony/translation/Symfony/Component/Translation/Translator.php
46. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
PHP PSR-4
Vamos desenvolver
47. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agência de Viagens
$ mkdir src/Funcionario -p
$ mkdir src/Utils -p
48. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
src/Utils/Dicionario.php
<?php
namespace AgenciaDeViagensUtils;
use SymfonyComponentTranslationTranslator;
use SymfonyComponentTranslationLoaderArrayLoader;
class Dicionario {
49. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
src/Utils/Dicionario.php
class Dicionario {
private $translator;
public function __construct($language) { }
public function consultar($texto) { }
}
50. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
src/Utils/Dicionario.php
public function __construct($language)
{
$this->translator = new Translator(null);
$this->translator->addLoader('array', new ArrayLoader());
$this->translator->addResource('array',
array('Hello World' => 'Olá mundo'), 'pt'
);
$this->translator->addResource('array',
array('Hello World' => 'Hola Mundo'), 'es'
);
$this->translator->setLocale($language);
}
51. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
src/Utils/Dicionario.php
public function consultar($texto)
{
return $this->translator->trans($texto);
}
52. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
src/Funcionario/Atendente.php
<?php
namespace AgenciaDeViagensFuncionario;
use AgenciaDeViagensUtilsDicionario;
class Atendente {
public function falar(Dicionario $dicionario, $texto)
{
return $dicionario->consultar($texto);
}
}
53. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
index.php
<?php
require("vendor/autoload.php");
require("src/Funcionario/Atendente.php");
require("src/Utils/Dicionario.php");
use AgenciaDeViagensUtilsDicionario;
use AgenciaDeViagensFuncionarioAtendente;
54. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
index.php
$language = isset($argv[1]) ? $argv[1] : null;
$atendente = new Atendente();
$dicionario = new Dicionario($language);
echo $atendente->falar($dicionario, 'Hello World');
55. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
$ php index.php
$ php index.php pt
$ php index.php es
PHP PSR-4
56. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
$ git status
$ git add --all
$ git commit -m "Agência de Viagens"
$ git push origin master
PHP PSR-4
57. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Autoloading com Composer
composer.json
"autoload": {
"psr-4": {
"AgenciaDeViagens": "src/"
}
}
PHP PSR-4
63. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☒ Controle de Versão
☒ Git
☒ Gerenciamento de Dependências
☒ Composer
☒ PHP
☒ FIG ☒ PSR-4
☒ Disponibilizar dependência
☐ GitHub ☐ Packagist
64. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Disponibilizar dependência - GitHub
É possível disponibilizar a dependência
através do GitHub, usando o seguinte
atributo no composer.json
66. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Disponibilizar dependência - GitHub
Mas, para isso é necessário uma chave SSH
Homework
67. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Agenda
☒ Controle de Versão
☒ Git
☒ Gerenciamento de Dependências
☒ Composer
☒ PHP
☒ FIG ☒ PSR-4
☒ Disponibilizar dependência
☒ GitHub ☐ Packagist
68. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Disponibilizar dependência - Packagist
Repositório de dependências
Packagist - https://packagist.org
74. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
index.php
<?php
require("vendor/autoload.php");
use AgenciaDeViagensFuncionarioAtendente;
echo get_class(new Atendente());
75. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Homework
Criar uma versão estável (tag) do código no GitHub
76. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Homework
Criar uma versão estável (tag) do código no GitHub
Mudar o require do seu código no composer.json para a
versão estável
77. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Homework
Criar uma versão estável (tag) do código no GitHub
Mudar o require do seu código no composer.json para a
versão estável
Desenvolver uma dependência que esteja no TOP 10 do
Packagist
78. FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani
Obrigado
http://bit.ly/
flisol-2015-disponibilizando-dependencias-php-final