Documentação do Symfony - versão 3.4
Renderizada do repositório symfony-docs-pt-BR no Github
O Symfony Flex é a nova forma de instalar e gerenciar aplicações Symfony. O Flex não é uma nova versão do Symfony, mas uma ferramenta que substitui e melhora o Instalador do Symfony.
O Symfony Flex automatiza as tarefas mais comuns das aplicações Symfony, tais como a instalação e remoção de bundles e outras dependências. O Symfony Flex funciona com o Symfony 3.3 e versões mais recentes. A partir do Symfony 4.0, o Flex será usado por padrão, mas ainda será opcional seu uso.
Internamente, o Symfony Flex é um plugin do Composer que modifica o comportamento dos
comandos require e update. Ao instalar ou atualizar dependências em uma
aplicação com Flex habilitado, o Symfony pode executar tarefas antes e depois da
execução das tarefas do Composer.
Considere o seguinte exemplo:
1 2 | $ cd my-project/
$ composer require mailer
|
Se você executar esse comando em uma aplicação Symfony que não usa o Flex,
você verá um erro do Composer explicando que mailer não é um nome de pacote
válido. No entanto, se a aplicação tiver o Symfony Flex instalado, esse comando termina
instalando e habilitando o SwiftmailerBundle, qual é a melhor forma de
integrar o Swiftmailer, o mailer oficial para aplicações Symfony.
Quando o Symfony Flex está instalado na aplicação e você executa composer require,
a aplicação faz uma requisição aos servidores do Symfony Flex antes de tentar instalar
o pacote com o Composer:
No exemplo acima, o Symfony Flex pede pelo pacote mailer e o
O servidor Symfony Flex detecta que mailer é de fato um alias para SwiftmailerBundle
e retorna a “receita” para ele.
As receitas são definidas em um arquivo manifest.json e podem conter qualquer número de
outros arquivos e diretórios. Por exemplo, este é o manifest.json para o SwiftmailerBundle:
1 2 3 4 5 6 7 8 9 10 11 12 | {
"bundles": {
"Symfony\\Bundle\\SwiftmailerBundle\\SwiftmailerBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"MAILER_URL": "smtp://localhost:25?encryption=&auth_mode="
},
"aliases": ["mailer", "mail"]
}
|
A opção aliases permite ao Flex instalar pacotes usando nomes curtos e fáceis de
lembrar (composer require mailer vs composer require symfony/swiftmailer-bundle).
A opção bundles diz ao Flex em quais ambientes esse bundle deve ser
habilitado automaticamente (all neste caso). A opção env faz o Flex
adicionar novas variáveis de ambiente na aplicação. Finalmente, a opção
copy-from-recipe permite que a receita copie arquivos e diretórios para sua aplicação.
As instruções definidas neste arquivo manifesto.json também são usadas pelo Symfony
Flex ao desinstalar dependências (por exemplo, composer remove mailer) para desfazer
todas as mudanças. Isso significa que o Flex pode remover o SwiftmailerBundle da
aplicação, excluir a variável de ambiente MAILER_URL e qualquer outro arquivo
e diretório criado por essa receita.
As receitas do Symfony Flex são contribuídas pela comunidade e são armazenadas em dois repositórios públicos:
Repositório de Receita Principal, é uma lista com curadoria de receitas para pacotes mantidos e de alta qualidade. Por padrão, o Symfony Flex procura somente nesse repositório.
Repositório de Receita Contrib, contém todas as receitas criadas pela comunidade. Todas são garantidas que funcionam, mas seus pacotes associados podem não ser mantidos. O Symfony Flex ignora essas receitas por padrão, mas você pode executar este comando para começar a usá-las em seu projeto:
1 2 | $ cd your-project/
$ composer config extra.symfony.allow-contrib true
|
Leia a Documentação das Receitas Symfony para aprender tudo sobre como criar receitas para seus próprios pacotes.
Symfony publicou um novo projeto “esqueleto”, que é um projeto Symfony mínimo recomendado para criar novas aplicações. Esse “esqueleto” já inclui o Symfony Flex como uma dependência, para que você possa criar uma nova aplicação Symfony com Flex habilitado executando o seguinte comando:
1 | $ composer create-project symfony/skeleton my-project
|
Note
O uso do Instalador do Symfony para criar novas aplicações não é mais recomendado
desde o Symfony 3.3. Ao invés, use o comando create-project do Composer.
O uso do Symfony Flex é opcional, mesmo no Symfony 4, onde o Flex será usado por padrão. No entanto, o Flex é tão conveniente e melhora tanto a sua produtividade que é altamente recomendável atualizar suas aplicações existentes para ele.
A única ressalva é que o Symfony Flex exige que as aplicações usem a seguinte estrutura de diretório, que é a mesma usada por padrão no Symfony 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 | your-project/
├── config/
│ ├── bundles.php
│ ├── packages/
│ ├── routes.yaml
│ └── services.yaml
├── public/
│ └── index.php
├── src/
│ ├── ...
│ └── Kernel.php
├── templates/
└── vendor/
|
Isso significa que instalar a dependência symfony/flex em sua aplicação
não é o suficiente. Você também deve atualizar a estrutura de diretório para a mostrada
acima. Infelizmente, não existe uma ferramenta automática para fazer essa atualização, então você deve
seguir estas etapas manuais:
composer create-project symfony/skeleton my-project-flex)require e require-dev definidas no seu arquivo composer.json
do projeto original para o arquivo composer.json do novo projeto.composer install. Isso
irá fazer com que o Symfony Flex gere todos os arquivos de configuração em config/packages/config/packages/*.yaml gerados e faça qualquer alteração
necesssária de acordo com a configuração definida no arquivo app/config/config_*.yml
do seu projeto original. Cuidado com o fato de que este é o passo mais demorado
e propenso a erros do processo de atualização.app/config/parameters.*.yml para os
novos arquivos config/services.yaml e .env dependendo de suas necessidades.src/{App,...}Bundle/ para src/ e
atualize os namespaces de cada arquivo PHP (IDEs avançados podem fazer isso automaticamente).app/Resources/views/ para templates/web/app_*.php originais foram personalizados, adicione essas alterações ao
novo controlador public/index.php.