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.
|
|
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.
|
|
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!