78
Disponibilizando dependências PHP com Composer, GitHub e Packagist

Disponibilizando dependências PHP com Composer, GitHub e Packagist

Embed Size (px)

Citation preview

Disponibilizando dependências PHP com

Composer, GitHub e Packagist

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

Thiago Henrique Poiani

BackgroundPHP, C#, JavaJavaScript, Node.JS, AngularJSMySQL, PostgreSQL, MongoDBHTML5, CSS3, SASS

Composer, Bower, npmGruntMocha, PHPUnit

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Apresentações

http://bit.ly/flisol-2015-disponibilizando-dependencias-php

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

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Controle de Versão

Concurrent Version SystemSubversionMercurialGit

Controle de Versão

Stack Overflow. Why Should I Use Version Control?. Disponível em: http://stackoverflow.com/a/1408464

Controle de Versão

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Controle de Versão - Git

http://git-scm.com/

Controle de Versão - Git

nvie.com. A successful Git branching model. Disponível em: http://nvie.com/posts/a-successful-git-branching-model/

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Controle de Versão - Git

GitHub

Controle de Versão - Git

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Controle de Versão - Git$ git clone https://github.com/thpoiani/flisol-2015.git

$ cd flisol-2015/

$ echo "<?php echo 'Hello World'; ?>" > index.php

$ php index.php$ sudo apt-get install php5-cli

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Controle de Versão - Git$ git status

$ git add index.php

$ git commit -m "Hello World"git config --global user.email "[email protected]"

git config --global user.name "Your Name"

$ git push origin mastergit config --global push.default simple

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências

Controle da versão da dependênciaDependências apenas para desenvolvimentoPadronização da estrutura do projetoNão reinventar a roda

Gerenciamento de Dependências

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências - Composer

https://getcomposer.org/

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências - Composer

$ curl -sS https://getcomposer.org/installer | php

$ php composer.phar init

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências - Composer

composer.json{

"name": "thpoiani/flisol-2015",

"license": "MIT",

"authors": [

{

"name": "Thiago Henrique Poiani",

"email": "[email protected]"

}

],

"require": {}

}

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências - Composer

composer.json

"require": {

"symfony/translation": "2.6.6"

}

$ php composer.phar install

$ php composer.phar update

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

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");

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências - Composer

require("vendor/autoload.php");

use Symfony\Component\Translation\Translator;

use Symfony\Component\Translation\Loader\ArrayLoader;

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'

);

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Gerenciamento de Dependências - Composer

echo $translator->trans('Hello World');

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

$language = isset($argv[1]) ? $argv[1] : null;

$translator->setLocale($language);

echo $translator->trans('Hello World');

Gerenciamento de Dependências - Composer

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

$ git status

Gerenciamento de Dependências - Composer

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/

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

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

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

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

PHP - FIG

PHP Framework Interop Group

PSR-0 Autoloading StandardPSR-1 Basic Coding StandardPSR-2 Coding Style GuidePSR-3 Logger InterfacePSR-4 Improved Autoloading

PHP-FIG — PHP Framework Interop Group. Disponível em: http://www.php-fig.org/

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

PHP - FIG

PHP Framework Interop Group

PSR-0 Autoloading StandardPSR-1 Basic Coding StandardPSR-2 Coding Style GuidePSR-3 Logger InterfacePSR-4 Improved Autoloading

PHP-FIG — PHP Framework Interop Group. Disponível em: http://www.php-fig.org/

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

PHP PSR-4

Namespace

<?php

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

PHP PSR-4

Namespace

<?php

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

use Symfony\Component\Translation\Translator;

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

PHP PSR-4

Namespace

<?php

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

use Symfony\Component\Translation\Translator;/vendor/symfony/translation/Symfony/Component/Translation/Translator.php

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

PHP PSR-4

Vamos desenvolver

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

src/Utils/Dicionario.php<?php

namespace AgenciaDeViagens\Utils;

use Symfony\Component\Translation\Translator;

use Symfony\Component\Translation\Loader\ArrayLoader;

class Dicionario {

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

src/Utils/Dicionario.phpclass Dicionario {

private $translator;

public function __construct($language) { }

public function consultar($texto) { }

}

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

src/Utils/Dicionario.phppublic 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);

}

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

src/Utils/Dicionario.phppublic function consultar($texto)

{

return $this->translator->trans($texto);

}

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

src/Funcionario/Atendente.php<?php

namespace AgenciaDeViagens\Funcionario;

use \AgenciaDeViagens\Utils\Dicionario;

class Atendente {

public function falar(Dicionario $dicionario, $texto)

{

return $dicionario->consultar($texto);

}

}

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 AgenciaDeViagens\Utils\Dicionario;

use AgenciaDeViagens\Funcionario\Atendente;

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');

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

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

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

$ php composer.phar update

/vendor/composer/autoload_psr4.php

PHP PSR-4

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

require("vendor/autoload.php");

// require("src/Funcionario/Atendente.php");

// require("src/Utils/Dicionario.php");

use AgenciaDeViagens\Utils\Dicionario;

use AgenciaDeViagens\Funcionario\Atendente;

index.php

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

$ git status

$ git add --all

$ git commit -m "Composer Autoload"

$ git push origin master

PHP PSR-4

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Disponibilizar dependência

Exploring Data. npm Packages Dependencies Graph. http://exploringdata.github.io/vis/npm-packages-dependencies/

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

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Disponibilizar dependência - GitHub

composer.json"repositories": [

{

"type": "git",

"url": "https://github.com/thpoiani/flisol2015"

}

],

"require": {

"thpoiani/flisol-2015": "dev-master"

}

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

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

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Disponibilizar dependência - Packagist

Popular Packagespsr/log

monolog/monolog

symfony/event-dispatcher

symfony/console

swiftmailer/swiftmailer

phpunit/php-code-coverage

symfony/yaml

phpunit/php-token-stream

phpunit/phpunit

Disponibilizar dependência - Packagist

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Disponibilizar dependência - Packagist

https://github.com/thpoiani/flisol-2015/settings

WebHooks & ServicesServices

UserToken

Test Service

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

$ mkdir agencia-de-viagens

$ curl -sS https://getcomposer.org/installer | php

$ php composer.phar init

composer.json

"require": {

"thpoiani/flisol-2015": "dev-master"

}

$ php composer.phar install

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

index.php

<?php

require("vendor/autoload.php");

use AgenciaDeViagens\Funcionario\Atendente;

echo get_class(new Atendente());

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

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

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

FLISol 2015 - Disponibilizando dependências PHP com Composer, GitHub e Packagist - Thiago Henrique Poiani

Obrigado

http://bit.ly/flisol-2015-disponibilizando-dependencias-php-final