Tableless

Busca Menu

Silex Middlewares 101 – Parte 1

Seja o primeiro a comentar por

Fala pessoal! Tudo bem? Espero que sim! Depois de uma longa temporada retorno com mais este post sobre o micro-framework Silex! Desta vez abordarei o uso dos middlewares no mesmo.

Middlewares

Os middlewares no Silex são utilizados para mudar o comportamento padrão do mesmo, os middlewares se mostram muito úteis quando pensamos na validação de tokens de acesso, save de logs e muitas outras tarefas. Basicamente temos dois tipos de middlewares, os de aplicação e os de rota. Mostraremos as diferenças abaixo:

Middlewares De Aplicação

Como o próprio nome já diz, esses middlewares impactam a aplicação como um todo e são três. Vamos ver como cada um funciona logo abaixo:

Before Method

O método before(); é sempre executado antes de suas rotas, no escopo de aplicação ele será acionado sempre que um usuário fizer alguma requisição a mesma. Veja o código abaixo:

<?php
#...
$app = new Application();

$app->before(function(){
    //Sua lógica aqui.
});

$app->get('/', function(Application $app) {
    return $app->escape('Middlewares');
});

$app->run();

Das linhas 5 a 7 temos a definição do nosso middleware before, como comentado, sempre que nossa aplicação for acessada, o middleware será acionado antes da execução da rota em questão. O before se torna muito útil para validação de tokens de acesso, validação de sessão, transformação de dados, dentre outros.

After Method

O after();, apesar do nome sugestivo, não quer dizer que o mesmo será executado após a chamada da rota, calma vô explicar!
O after executa antes da saída do response da rota chamada!

<?php
#...
$app->after(function(){
    //Exemplo
    print 'After Middleware | ';
});

$app->get('/', function(Application $app) {
    return $app->escape('Router Content!');
});

#...

A saida do código acima seria algo como:
After Middleware | Router Content!
Um caso de uso para tal, seria a transformação do response dentre outras tarefas!

Finish Method

Existe ainda o middleware finish();, esse sim! É executado após a execução da rota em questão!
Vamos ao exemplo:

<?php
#...
$app->finish(function(){
    //Exemplo
    print 'Finish middleware';
});

$app->get('/', function(Application $app) {
    return $app->escape('Router Content | ');
});
#...

A saída do código seria:
Router Content | Finish middleware
Muito útil para save de logs dentre outras tarefas!

Conclusão

Esses são os middlewares de aplicação do Silex Framework, percebemos que os mesmos tornam nossos trabalhos bem mais simplificados em determinados casos, só precisamos tomar um pouco de cuidado para não deixa-los um tanto quanto complexos, evitando assim dor de cabeça futura!
Em nosso próximo post, ainda sobre Middlewares, abordaremos os middlewares de rotas e algumas particularidades dos middlewares como um todo!
O código completo deste post você pode encontrar no gist. Abraços e até a próxima!

Publicado no dia