Construindo um Silex Skeleton Application

Olá pessoal tudo bem?

Irei construir um skeleton application utilizando o micro framework Silex. Este micro framework é irmão do Symfony framework full stack e ambos os projetos são mantidos pela comunidade PHP e a empresa SensioLabs empresa fundada pelo Fabien Potencier e criador de ambos frameworks citados acima.

O Silex tem como base o Symfony e Pimple  e foi inspirado pelo Sinatra um  framework Ruby. Tendo como foco a simplicidade no desenvolvimento de aplicações.

E qual é a finalidade do skeleton?

Você irá aprender a utilizar o micro framework, seguindo boas práticas e como resultado final terá em mãos, uma base que facilitará a construção de aplicações utilizando o Silex.

Nosso projeto terá a seguinte estrutura de diretórios:

  • config
  • src/App/Controller
  • public
  • templates

Sendo:

config: Local que armazenara as configurações globais do projeto e as rotas da aplicação.

public:  Responsável por manter as informações publicas que o usuário terá acesso pelo navegador, sendo eles:

  • index.php
  • css
  • js
  • images.

src/App/Controller:  Responsável por manter o nosso cotroller da aplicação.

Após termos criados nossa estrutuda de diretórios, vamos criar nosso arquivo composer.json. Pois iremos controlar todas as dependências do nosso projeto pelo Composer.

Para criar o arquivo vamos acessar pelo terminal o diretório raiz do projeto, devemos executar o seguinte comando:

Este comando é auto explicativo, e no terminal ele irá lhe guiar passo a passo em sua construção.

No momento em que for solicitado a lista das dependências, devemos informar as seguintes dependências.

Após a criação devemos configurar o autoload para nosso módulo.

O seu composer deve ficar similar ao demonstrado abaixo:

Após as configurações serem inseridas no composer, vamos instalar nossas dependências, para isso devemos executar o seguinte comando .

Agora que já configuramos o nosso projeto, Show me the code!!!!

Implementação do bootstrap.php

Inicialmente devemos criar o arquivo bootstrap.php, dentro do diretório config.

Após a criação do arquivo devemos importar o autoloader do composer, pois é ele que irá gerenciar nossas dependências.

Devo salientar que utilizei o require_once, tendo em vista que o autoload.php é fundamental para o devido funcionamento da aplicação. Em seguida eu apontei para o diretório e o arquivo que desejo, a instrução ‘/../’ é para voltar um diretório, pois o diretório vendor está na raiz do nosso projeto.

Agora devemos importar o componente Silex\Application responsável pela execução do framework.

Após importação vamos instanciar nosso objeto para podermos utiliza-lo.

Como estamos desenvolvendo um skeleton como estudo, o Silex fornece a seguinte funcionalidade:

Onde habilita o modo de debug da aplicação, nossa implementação ficará da seguinte maneira:

Com isso finalizamos a implementação inicial do nosso arquivo de configuração.

Implementação do routes.php

Este arquivo deve ser criado dentro do diretório config, junto ao arquivo bootstrap.php.

Logo no início importaremos o nosso arquivo de configuração, que acabamos de cirar.

Após a importação vamos desde já registrar nossa primeira rota.

Vou descrever o que acabamos de codigicar.

O primeiro parâmetro, identifica a rota desejada, em nosso caso / (root).

O segundo parâmetro, estou apontando diretamente para o controller e a action que desejo que retorno os dados para esta rota.

Por último defino que o nome desta rota será “home”.

No Silex podemos tratar cada tipo de request de forma isolada, por exemplo:

  • GET
    • $app->get();
  • POST
    • $app->post();
  • PUT
    • $app->put();
  • DELETE
    • $app->delete();

Viram como é fácil trabalhar com as request solicitadas pelo usuário 🙂

Implementação do AppController.php

Não é segredo nenhum que podemos utilizar o padrão MVC para desenvolvimento com PHP, e o Silex não seria diferente, ainda melhor pois sendo ele um micro framework ele deixa a cargo do desenvolvedor essa tomada de decisão.

Vamos acessar o diretório src/App/Controller e em seguida criar o arqivo AppController.php

Após a criação do nosso controller, vamos implementar sua estrutura básica.

Primeiro definimos nossa namespace, e caso esteja com dúvida, nós configuramos o autoloder do composer para gerenciar nosso módulo App, por isso podemos definir tranquilamente nossa namespace.

Eu importei o componente Silex\Application, pois ele será consumido pelo método de boas vindas.

Implementação do método welcomeAction

Devemos implementar o método responsável por retornar as boas vindas quando o usuário acessar nosso skeleton.

Como podemos analisar, o método apenas retorno a string ‘Hello World!’, e de fato por enquanto é o que desejamos.

Implementação do index.php

Ok, implementamos nossas configurações, a rota e nosso controller o que devemos fazer agora?

Devemos implementar o arquivo index.php, onde todo “mambo jambo” do Silex irá ocorrer.

Devemos criar o arquivo index.php dentro do diretório public, contendo a seguinte estrutura.

Aqui foi realizado a importação das configurações, no caso importamos as rotas que por sua vez consome o bootstrap.php

E o método run() é o responsável por iniciar nossa aplicação, ele “liga o motor” para que o silex entre em ação.

Apresentação do resultado

Vamos fazer uso do servidor embutido do PHP, para isso devemos acessar o diretório raiz do nosso projeto e executar o seguinte comando.

resultado_silex_skeleton

Como podemos notar, toda a parte de rotas da nossa aplicação foi facilmente implementada utilizando o silex, o que com certeza é um alivio de carga de desenvolvimento monstruoso, O Silex é muito extensível e também podemos utilizar componentes de outros frameworks para assim montar a estrutura ideal do seu projeto. Como por exemplo a engine de templates Twig sendo uma excelente escolha para trabalharmos com nossas estruturas HTML.

Utilizando o Twig

Como dito anteriormente o Twiw é um motor de renderização de templates rápido, seguro e flexível. Eu particularmente acho a melhor engine para ser utilizada.

Para podermos utilizar esse componente antes devemos alterar nosso arquivo composer.json, para isso devemos incluir no require as dependências:

Este componente é um provider, e o que seria um provider?

De acordo com a própria documentação do Silex:

“Providers allow the developer to reuse parts of an application into another one. Silex provides two types of providers defined by two interfaces: ServiceProviderInterface for services and ControllerProviderInterface for controllers.”

Tradução livre

“Providers permitem que o desenvolvedor reutilizar partes de uma aplicação para outra. Silex fornece dois tipos de providers definidos por duas interfaces: ServiceProviderInterface para camada de serviços e ControllerProviderInterface para camada dos controladores.”

Após alteração do composer.json o mesmo ficará da seguinte maneira

Agora bata acessarmos novamente o diretório do nosso projeto e executarmos o seguinte comando.

Criação da estrutura de diretórios para utilizar o twig.

Devemos criar o diretório templates na raiz do projeto, para que possamos armazenar nossos arquivos das nossa view.

Criação do layout.html

Dentro do diretório templates devemos criar o arquivo layout.html e inserir a seguinte estrutura interna.

Note que estou utilizando comandos do Twig dentro do código HTML onde definimos o bloco content, para a exibição do nosso conteúdo para o usuário.

Criação da view welcome.html

Dentro do diretório templates devemos criar o arquivo welcome.html e inserir a seguinte estrutura interna.

Uma breve explicação, logo no início do arquivos nós estendemos o layout desejado e em seguida incluímos o bloco content, onde fará ligação com sua referencia no layout. Em resumo o texto do controller será exibido nesta view que utiliza nosso layout.

Mas apenas isso não é suficiente para que nosso projeto funcione como desejamos, devemos configurar nosso twig service provider, e como é uma configuração global vamos implementar no arquivo bootstrap.php Incluímos nossa dependência em nosso arquivo.

Em seguida registramos nosso provider

Note que passamos como segundo parâmetro o local onde nossos templates se encontram.

Agora devemos incluir o Twig em nosso app.

Após nossas alterações o arquivo bootstrap.php deve ficar semelhante ao demonstrado abaixo.

Apresentação dos resultados

Após a realização das etapas acima estamos prontos para visualizar nosso skeleton em pleno funcionamento, vamos executar o servidor embutido novamente para analisarmos o resultado.

resultado_silex_skell_twig

E pronto, temos um skeleton application para construirmos nossas aplicações utilizando o micro framework Silex, viram como é muito simples o seu uso. Claro que o framework dispõem de uma vasta gama de recursos e que cabe análise do que é necessário para sua aplicação, porem o básico para o start está pronto 🙂

Próximos passos

Abaixo estão listados os próximos passos que iremos executar para aprimorar nosso skeleton, deixando ele ainda mais fortalecido.

  • Teste Unitários
    • Em um próximo post irei implementar toda a estrutura que permitira nosso skeleton suportar e executar testes unitários com PHPUnit.
  • Log do sistema
    • Em um próximo post irei implementar toda a estrutura que permitira nosso skeleton suportar e executar logs no sistema com o Monolog.

Caso tenham duvidas ou sugestões deixem nos comentários ou acessem o repositório no GitHub silex_skeleton_application.

Espero que tenham gostado e que tenha ajudado a iniciar ou compreender melhor o fascinante framework Silex.

Até a próxima pessoal!

4 comentários sobre “Construindo um Silex Skeleton Application”

  1. Excelente, me ajudou muito implementar uma primeira aplicação com o Framework. Parabéns pelo artigo.

    1. Olá Arthur, tudo bem?

      Fico muito feliz que o post tenha lhe auxiliado, o Silex é um micro framework fantástico e podemos fazer aplicações fantásticas com ele, divirta-se com ele 🙂

  2. Opa!… muito bom o post amigo!!! Excelente explicação!
    Tive apenas que atualizar algumas coisas no twig….

    1. Olá, Alberane.

      Fico feliz que tenha apreciado o conteúdo.

      Seria bacana você escrever um comentário descrevendo as atualizações que realizou, pois com certeza auxiliará outras pessoas.

      Infelizmente a Sensiolabs, empresa mantenedora do Silex o descontínuou, devido ao Symfony flex, particularmente gostava muito do Silex, pela sua simplicidade no uso, porém o Symfony é fantástico.

      Grande abraço e sucesso em seus projetos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *