quarta-feira, 2 de julho de 2014

Middlewares


Dia! Firm e Fort? Vamos lá! Agora vamos aprofundar um pouco mais. No Silex é permitido executar um comportamento que altera o seu padrão em diferentes estágios do tratamento na sua chamada através de Middlewares. As aplicações Middlewares são acionados de forma independente do pedido tratado e suas rotas são acionados quando sua associado é correspondido. Entendeu? É mais simples que parece, vou tentar explicar na prática que é mais divertido (deixando claro que vou usar como base sempre as documentações oficiais).

Aplicações Middlewares

Os Middlewares são executados apenas para o Request mestre.

Before Middleware

Um Before Middleware permite que você ajustar a solicitação ANTES que o controlador é executado:
$app->before(function (Request $request) {
    // seu código
});
Por padrão, o middleware é executado após o encaminhamento e a segurança.

Agora se você quiser que seu middleware seja executado mesmo se uma exceção é lançada no início (em um erro 404 ou 403, por exemplo) você precisa registrá-lo como um evento "Early" (precoce):
$app->before(function (Request $request) {
    // seu código
}, Application::EARLY_EVENT);
É claro que, neste caso, o encaminhamento e a segurança não serão executadas, e assim você não terá acesso ao local, a rota atual, ou segurança do usuário.

After Middleware

Permite ajustar a resposta antes de ser enviado para o cliente, ou seja, você ajusta as solicitações DEPOIS de tudo executado na aplicação.
$app->after(function (Request $request, Response $response) {
    // seu código
});

Finish Middleware

Permite que você execute tarefas após a resposta foi enviada para o cliente (como o envio de e-mails ou de registro):
$app->finish(function (Request $request, Response $response) {
    // seu código
    // Aviso: modificações no Request ou Response serão ignorados
});


Route Middlewares

As "Route Middlewares" são adicionados às rotas ou coleções de rotas na sua chamada/rota e elas só são acionados quando a sua rota correspondente é correspondida. Você também pode empilhá-los, entenderam? Difícil explicar mas é assim óh:
$antes = function(Request $request, Application $app) {
    // seu código
};
$depois = function(Request $request, Response $response, Application $app) {
    // seu código
};
$app->get('/sua_rota', function () {
   // seu código
})
  ->before($antes1)
  ->before($antes2)
  ->after($depois1)
  ->after($depois2);
Uma Before Route Middleware é executada antes da rota ser chamada, mas depois da Before Application Middlewares e uma After Route Middleware é executada depois da rota chamada, mas antes da aplicação After Application Middlewares. Haha! Agora te confundi né? É um vai-e-vem danado mesmo, mas é mais claro nos códigos que tentando explicar.


Prioridade dos Middlewares 

Mais vai-e-vem! Sim, você pode adicionar quantos middlewares quiser, seguindo a ordem que você adicionou e também pode controlar explicitamente a prioridade de seu middleware, passando um argumento(EARLY_EVENT e LATE_EVENT) adicional para os métodos de registo, fazendo que seja executado antes ou depois:
$app->before(function (Request $request) {
    // seu código
}, Application::EARLY_EVENT);

$app->before(function (Request $request) {
    // seu código
}, Application::LATE_EVENT);


O Curto-Circuito do Controlador

Isso mesmo! Dando tilt no Controller. Hehe! Se Before Middleware retornar um objeto Response, o Request dará um "curto-circuito" (os próximos middlewares não serão executados, nem o retorno de chamada rota), e o Response é passado para o After Middlewares de imediato:
$app->before(function (Request $request) {
    // redirecionar o usuário para a tela de login, 
    // se o acesso ao recurso é protegido
    if (...) {
        return new RedirectResponse('/login');
    }
});
Isto é usado para autenticação de usuários por exemplo.

Bom é mais ou menos isso. Confuso de explicar por se tratar deste Vai-e-Vem danado, mas é isso. No decorrer dos próximos artigos usaremos e será mais claro seu entendimento sobre Middleware.

Aguardo comentários.

Até a próxima pessoal! ;-)

quarta-feira, 11 de junho de 2014

Iniciando com Silex

Dia!

Agora a parte que todos nós devs gostamos, colocar a mão na massa código! Acho que nem precisava fazer 3 postagens para chegarmos até aqui, mas (poderia dar uma desculpa ou explicação aqui) eu quis! :-P

Bora lá! Depois de instalar o Silex a partir do Composer, vamos criar um arquivo chamado .htaccess onde teremos algumas configurações no servidor. Este arquivo para quem não sabe é de Rewrite engine, que nos ajuda trabalhar com reescrita de URLs, muito bom para URLs amigáveis, encurtar os endereços e ajudando a deixar os endereçamentos mais dinâmicos. Crie o arquivo com este conteúdo:

< IfModule mod_rewrite.c >
  Options -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^ index.php [QSA,L]
</ IfModule >
Feito isso estamos prontos pra iniciar com a criação de outro arquivo onde faremos o bootstrap do Silex. Crie um arquivo chamado index.php com o conteúdo abaixo:

require_once 'vendor/autoload.php';

$app = new Silex\Application();
$app->get('/', function () {
    return 'Seja bem vindo ao Silex!';
});
$app->run();
Pronto! Pode acessar o endereço de sua aplicação que aparecerá a mensagem "Seja bem vindo ao Silex!"... Sua primeira aplicação Silex Framework! É necessário chamar o autoload.php dentro da pasta vendor, iniciar uma nova aplicação ($app), definimos o que ela fará e depois a rodamos ($app->run();).

Só isso? Ah não né? Vamos deixar isso mais divertido, hehe! Que tal já iniciarmos nossa primeira rota? Bora lá! Vamos implementar este primeiro código e colocar um novo endereçamento, quando entrarmos no endereço principal dará a mensagem como falamos anteriormente, mas se completarmos o endereço com /ola/Seu_nome, teremos uma nova mensagem, façam o teste, atualize o conteúdo de seu arquivo index.php.

require_once 'vendor/autoload.php';

$app = new Silex\Application();

$app->GET('/', function() { 
    return 'Seja bem vindo ao Silex!';
});
$app->GET('/ola/{nome}', function($nome) use($app) { return 'Olá '.$app->escape($nome); }); $app->run();
Vejam que aparecerá a mensagem "Olá Seu_nome". Isso ocorre porque definimos a variável na URL pelo método GET e retornamos ela dentro da exibição. 

É Sério! Simples assim mesmo...

Até a próxima pessoal! :-)

terça-feira, 10 de junho de 2014

Instalando o Silex

A instalação do Silex é tão fácil quando usa-lo. A maneira que recomendo e uso é pelo Composer, mas pode fazer o Download e usar.

Via Composer:

Por Composer é mais flexível e mais fácil de começar. Crie uma pasta para seu app e crie um arquivo dentro com o nome composer.json. Coloque o seguinte conteúdo dentro dele:
{
    "require": {
        "silex/silex": "~1.2"
    }
}
Caso não tenha o Composer instalado:
$ curl -sS https://getcomposer.org/installer | php
E depois só dar o comando:
$ composer.phar install

Via Download:

Você pode baixar o arquivo PHAR. Mas este método esta obsoleto pois há uma série de ressalvas e também não permite que você facilmente adicionar outras dependências. Por isso, melhor não né? Vamos utilizar Composer que é super simples de se aprender. Veja mais detalhes aqui.

Até a próxima pessoal! :D

segunda-feira, 9 de junho de 2014

Hello World!

Saudações Devs!


Vou tentar aqui neste simples blog apresentar um pouco o Silex, que é um micro-framework PHP para PHP 5.3. É baseado em Symfony 2 e Pimple e inspirado no Sinatra. "Um micro-framework PHP de pé no ombro de gigantes" como definem no site oficial.



Quem esta por trás do Silex?  Nada mais nada menos que Fabien Potencier, o criador do framework Symfony, e Igor Wiedler e é liberado sob a licença MIT.

Nas próximas postagens irei apresentar como instalar, organizar suas routes, utilizar os Services, organizar os códigos em MVC, dentro outros...

Saiba mais no site oficial: http://silex.sensiolabs.org/

Abs.