Como criar recipes do Symfony Flex e enviar para o repositório \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 11 Horas 

 18 Min 

 09 Seg 

   Tempo restante da oferta: 11 18 09 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Como criar recipes do Symfony Flex e enviar para o repositório  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Como criar recipes do Symfony Flex e enviar para o repositório

 Aprenda a criar recipes do Symfony Flex personalizados para automatizar as configurações de bundles. Além disso, o post também mostra como enviar o recipe para o repositório e testar na prática.

 [ Elton Fonseca ](https://www.treinaweb.com.br/blog/autor/elton-fonseca) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/10155418/recipes-symfony.png)  

O [Symfony Flex](https://www.treinaweb.com.br/blog/o-que-e-o-symfony-flex-e-como-ele-funciona/ "Symfony Flex") facilita a instalação de dependências na aplicação. Ele faz isso usando uma “receita” ou em inglês recipe que indica quais ações ele deve realizar no projeto. Essa receita fica armazenada dentro dos repositórios do Symfony Flex que pode ser o [repositório oficial](https://github.com/symfony/recipes "repositório oficial"), da própria comunidade chamado [repositório contrib](https://github.com/symfony/recipes-contrib "repositório contrib") ou repositórios privados.

Antes de iniciar a criação do recipe aconselho realizar a leitura do post [Como criar repositórios privados do Symfony Flex](https://www.treinaweb.com.br/blog/como-criar-repositorios-privados-do-symfony-flex/ "Como criar repositórios privados do Symfony Flex"), pois alguns conceitos são explicados nele.

Nesse post vamos aprender como criar recipes dos nossos próprios bundles, validar e enviar para o repositório, seja ele o repositório disponível para comunidade (contrib) ou um repositório privado, já que o processo basicamente é o mesmo.

[  ![Symfony - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/symfony.svg)   Curso Symfony - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/symfony-fundamentos)

## Ações possíveis

O Symfony Flex possui um conjunto de ações que podemos inserir na receita para que ele possa executar no projeto onde a dependência foi instalada:

- **bundles configurator** - configura entradas no arquivo de bundles da aplicação
- **container configurator** - configura entradas no container da aplicação
- **copy-from-package configurator** - copia pastas e arquivos do repositório para a aplicação
- **copy-from-recipe configurator** - copia pastas e arquivos do recipe para a aplicação
- **env configurator** - Adiciona entradas no arquivo de configuração de ambiente .env
- **composer-scripts configurator** - registra scripts no arquivo composer.json
- **gitignore configurator** - Adiciona entradas no arquivo de configuração .gitignore
- **post-install-output configurator** - Permite definir informações que serão exibidas no console ao final do processo de configuração do Flex

Essas ações são definidas dentro de um arquivo [JSON](https://www.treinaweb.com.br/blog/o-que-e-json/ "JSON") que será lido pelo Flex.

## Estrutura de pastas de um recipe

A primeira coisa que precisamos nos preocupar quando vamos criar um recipe é a estrutura de pastas. A leitura do recipe pelo Flex depende que ele possua um padrão de pastas envolvendo o nome do fornecedor, bundle e versão mínima. Essas informações são retiradas do [packagist.org](https://packagist.org/packages/elton-fonseca/empty-symfony-bundle "packagist.org"), veja o exemplo abaixo:

![Pacote Bundle](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30132948/bundle_pacote.png)

Se formos criar um recipe para o bundle acima precisamos definir a seguinte estrutura de pastas:

```
elton-fonseca/empty-symfony-bundle/1.0

```

No caso acima, estamos informando que esse recipe deve ser usado da versão 1.0.0 em diante do nosso bundle.

## Criando o primeiro recipe

Vamos agora criar nosso primeiro recipe. Crie a seguinte estrutura de pastas dentro de um local qualquer do seu computador:

![estrutura de pastas recipe](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30133042/estrutura_de_pastas_recipe.png)

Agora precisamos criar um arquivo chamado `manifest.json` onde devemos colocar todas as ações que o Flex deve fazer.

![arquivo manifest](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30133118/arquivo_manifest.png)

Vamos testar algumas das ações possíveis quando estamos trabalhando com Flex. No arquivo criado anteriormente insira o seguinte conteúdo:

```json
{
    "env": {
        "TREINAWEB": "cursos"
    },
    "copy-from-package": {
        "Treinaweb.php": "%SRC_DIR%/Treinaweb.php"
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/"
    },
    "aliases": ["treinaweb", "treinaweb-recipe"]
}

```

É importante deixar uma quebra de linha no final do arquivo, caso contrário o validador do Flex da erro na hora de enviar

Primeiro declaramos que o flex deve adicionar uma nova entrada no arquivo `.env` do projeto com chave TREINAWEB e valor cursos.

```json
"env": {
    "TREINAWEB": "cursos"
},

```

Em seguida falamos para o flex copiar um arquivo que está dentro do bundle para a pasta SRC do projeto que está instalando a dependência:

```json
"copy-from-package": {
    "Treinaweb.php": "%SRC_DIR%/Treinaweb.php"
},

```

Na última ação pedimos para ele copiar uma pasta chamada `config` do recipe para a pasta do projeto:

```json
"copy-from-recipe": {
    "config/": "%CONFIG_DIR%/"
},

```

Crie dentro da mesma pasta onde está o arquivo `manifest.json` uma pasta chamada `config` com um arquivo de exemplo chamado `treinaweb.yaml`. Dentro do arquivo coloque apenas um comentário:

```yaml
#arquivo de teste

```

É importante deixar uma quebra de linha no final do arquivo, caso contrário o validador do Flex da erro na hora de enviar

Conforme vimos anteriormente além das ações mostradas neste exemplo é possível realizar outras. Você pode [consultar todas as ações possíveis](https://github.com/symfony/recipes#configurators "consultar todas as ações possíveis") no repositório oficial da equipe do Symfony.

## Clonando o repositório na máquina local

Independente se enviará seu recipe para um repositório privado ou público, a primeira coisa que precisa fazer é clonar o repositório. Vamos usar como exemplo o repositório privado criado no post sobre esse assunto citado no início do artigo:

![tela do repositório](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30133309/repostorio.png)

Para clonar o repositório vamos usar a linha de comandos. Se estiver usando Windows aconselho o Power Shell, se estiver usando Linux ou MacOS pode usar o terminal padrão sem problemas. Execute o comando para clonar:

```
git clone https://github.com/elton-fonseca/flex-private-repository.git

```

Entre na pasta flex-private-repository com o comando:

```
cd flex-private-repository

```

Agora precisamos criar uma nova branch no repositório que clonamos. Através dessa branch podemos criar um pedido para que nosso recipe seja validado e integrado ao repositório. Execute o comando:

```
git checkout -b new-recipe

```

[  ![Symfony - Gerenciando aplicações com Symfony Flex](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/symfony.svg)   Curso Symfony - Gerenciando aplicações com Symfony Flex Conhecer o curso ](https://www.treinaweb.com.br/curso/symfony-gerenciando-aplicacoes-com-symfony-flex)

## Enviando o recipe para o repositório

Agora dentro da pasta onde clonou o repositório faça a cópia da pasta do recipe que criamos, representada pelo nome do fornecedor do pacote.

![recipe no repositório](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30135052/recipe_no-reposit%C3%B3rio.png)

Precisamos enviar essas alterações para o servidor do Github. Execute os comandos:

```
git add .

git commit -m "adicionar um novo recipe"

git push origin new-recipe

```

Precisamos dizer ao [Github](https://www.treinaweb.com.br/blog/criando-repositorio-no-github/ "Github") que desejamos que as alterações realizadas no branch novo sejam adicionadas ao branch principal. Ao acessar o repositório no Github automaticamente ele te dirá que enviou um branch se deseja unir a outro:

![criando nova branch](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30140216/novo_branch.png)

No nosso caso precisamos unir o novo branch ao master, clique no botão conforme abaixo para realizar esse pedido:

![pedido de full requenst](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30140518/pedido_pull_request.png)

Uma vez que envia o pedido automaticamente, o robô do Symfony Flex faz a validação do conteúdo do seu recipe. Se tudo for aprovado basta clicar **Merge Pull Request**:

![merge pull request](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30145907/merge_pull_request.png)

Ao voltar na página inicial do repositório verá que a pasta do recipe já está no branch master:

![branch master repositório](https://dkrn4sk0rn31v.cloudfront.net/2019/08/30151336/reposit%C3%B3rio.png)

## Testando o recipe

Acesse uma aplicação gerenciada pelo Symfony Flex com código de projeto inserido no repositório, caso seja um repositório privado, e execute o comando para instalação do nosso bundle:

```
composer install elton-fonseca/empty-symfony-bundle

```

Ao instalar o pacote no seu projeto automaticamente serão executadas as ações do recipe:

![executando recipe](https://dkrn4sk0rn31v.cloudfront.net/2019/09/03170625/execucao_recipe.png)

Ao verificar as diferenças no projeto depois da execução verá que as ações foram executadas corretamente:

![diferenças no projeto](https://dkrn4sk0rn31v.cloudfront.net/2019/09/03170858/diferencas-no-projeto.png)

- Copiou o arquivo do recipe para a pasta de configuração
- Copiou o arquivo do bundle para a pasta SRC
- Adicionou um novo valor no arquivo de env

Isso indica que nosso recipe foi criado corretamente.

[  ![Desenvolvedor Symfony Full-Stack](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/symfony.svg)   Formação Desenvolvedor Symfony Full-Stack Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-symfony-full-stack)

- [ #Symfony ](https://www.treinaweb.com.br/blog/tag/symfony)
- [ #Symfony Flex ](https://www.treinaweb.com.br/blog/tag/symfony-flex)

Autor

 ![Elton Fonseca](//secure.gravatar.com/avatar/2cee05645357ced0841ce76ba5569c72?d=mm)

## Elton Fonseca

 Professor e desenvolvedor. Formado em análise e desenvolvimento de sistema, pós graduado em engenharia e arquitetura de software. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel. [@eltonfonsecadev](https://twitter.com/eltonfonsecadev) 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/elton-fonseca)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/19184020/symfony-repositorio-privado-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Como criar repositórios privados do Symfony Flex ](https://www.treinaweb.com.br/blog/como-criar-repositorios-privados-do-symfony-flex) 

     Aprenda como criar repositórios do Symfony Flex gratuitamente para guardar os Recipes usados em seus projetos privados.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/03163125/SYMFONY-FLEX-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ O que é o Symfony Flex e como ele funciona ](https://www.treinaweb.com.br/blog/o-que-e-o-symfony-flex-e-como-ele-funciona) 

     Nesse post falaremos sobre os principais conceitos do Symfony Flex. Veremos desde o início como ele funciona, qual seu papel na criação da estrutura do Symfony e como ele pode nos ajudar no processo de gerenciamento de dependências do projeto.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/09/04112944/DJANGO-PROJETOS-PYCHARM-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Como criar comandos customizados no Django ](https://www.treinaweb.com.br/blog/como-criar-comandos-customizados-no-django) 

     Aprenda a criar comandos customizados no Django para automatizar tarefas, personalizar funcionalidades e integrar sistemas externos!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/Como_criar_uma_modal_com_a_tag_dialog-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     3 anos atrás

    ##  [ Como criar uma modal com a tag dialog ](https://www.treinaweb.com.br/blog/como-criar-uma-modal-com-a-tag-dialog) 

     Domine modais em HTML com a tag 'dialog'. Crie, personalize e interaja em seu site. Torne-o envolvente e moderno!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/GITLAB-400x280.png)  [ Controle de versão ](https://www.treinaweb.com.br/blog/categoria/controle-de-versao) 

     7 anos atrás

    ##  [ Como criar repositório no GitLab ](https://www.treinaweb.com.br/blog/como-criar-repositorio-no-gitlab) 

     Veja neste artigo como criar repositório no GitLab.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/29222037/PROJECT-BOARD-GITHUB-400x280.png)  [ Tecnologia ](https://www.treinaweb.com.br/blog/categoria/tecnologia) 

     7 anos atrás

    ##  [ Como criar um Project Board utilizando o GitHub ](https://www.treinaweb.com.br/blog/como-criar-um-project-board-utilizando-o-github) 

     Veja neste artigo como criar Project Boards para gerenciar seus projetos no GitHub.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/03134545/BRIEFING-400x280.png)  [ Marketing Digital ](https://www.treinaweb.com.br/blog/categoria/marketing-digital) 

     8 anos atrás

    ##  [ Como criar um briefing matador ](https://www.treinaweb.com.br/blog/como-criar-um-briefing-matador) 

     Neste artigo, veremos como criar um briefing matador, solicitando as informações necessárias para uma execução com louvor dos seus projetos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/11153116/symfony-projeto-e-crud-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Iniciando com Symfony: Como criar o projeto e seu primeiro CRUD ](https://www.treinaweb.com.br/blog/iniciando-com-symfony-como-criar-o-projeto-e-seu-primeiro-crud) 

     Nesse artigo veremos como criar o primeiro projeto no Symfony. Falaremos sobre qual tipo de estrutura escolher dependendo da aplicação e como criar o primeiro CRUD utilizando o comando make.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/DART-ORIENTACAO-OBJETOS-400x280.png)  [ Dart ](https://www.treinaweb.com.br/blog/categoria/dart) 

     4 anos atrás

    ##  [ Orientação a objetos em Dart ](https://www.treinaweb.com.br/blog/orientacao-a-objetos-em-dart) 

     Aprenda Orientação a objetos em Dart e como trabalhar com classes, atributos, métodos e objetos em Dart e aumente seus conhecimentos!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/03075050/Github-Tokens-400x280.png)  [ Controle de versão ](https://www.treinaweb.com.br/blog/categoria/controle-de-versao) 

     7 anos atrás

    ##  [ Github: Pare com as senhas e utilize Tokens de Acesso ](https://www.treinaweb.com.br/blog/github-pare-com-as-senhas-e-utilize-tokens-de-acesso) 

     Veja como é simples usar Tokens de Acesso no Github e suas vantagens em relação à sua senha comum.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/14170401/COMANDOS-SYMFONY-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Principais comandos do Symfony CLI ](https://www.treinaweb.com.br/blog/principais-comandos-do-symfony-cli) 

     Nesse artigo falaremos sobre o utilitário de linha de comando symfony. Veremos como realizar a criação de projetos, utilizar o servidor de desenvolvimento, executar comandos da aplicação e outros recursos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/pessoas-ux-400x280.jpg)  [ Acessibilidade e User Experience (UX) ](https://www.treinaweb.com.br/blog/categoria/acessibilidade-e-user-experience-ux) 

     10 anos atrás

    ##  [ Personas em UX ](https://www.treinaweb.com.br/blog/personas-em-ux) 

     Personas são personagens fictícios criados para representar os diferentes tipos de usuários que podem usar um site, marca ou produto.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **11h 18min 09s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
