Filtros Laravel 4 em controladores

Filtrar no Laravel 4 é extremamente fácil. Caso você não saiba do que estou falando, um filtro no Laravel é usado em uma determinada rota ou conjunto de rotas para evitar que certas pessoas ou ações aconteçam em uma determinada rota. O Laravel vem com alguns filtros simples, mas poderosos, para você começar. Isso inclui um filtro para garantir que o usuário esteja conectado e outro para proteção contra ataques CSRF.

Normalmente, você adicionaria esses filtros em seu routes.phpou filters.php. No entanto, acho que separar esse código em outro arquivo longe do controlador que ele está protegendo é complicado. Eu prefiro colocar esses filtros no meu controlador para que eu possa ver rapidamente quais filtros eu tenho em certas rotas. Isso pode ser feito facilmente por meio do construtor do controlador. Vamos dar uma olhada.

Vamos fingir que temos um controlador de recursos que possui um método de armazenamento para armazenar uma postagem no banco de dados. Queremos ter certeza de que essa rota está protegida de ataques CSRF e só deve ser acessada por AJAX. Isso significa que precisaremos de um filtro para CSRF e AJAX. O CSRF vem com Laravel. Vamos construir um para AJAX. Insira o seguinte código em routes.php

Route::filter('ajax', function()
{
if (!Request::ajax()) App::abort(404);
});

Em seguida, precisamos adicionar esses dois filtros ao nosso controlador por meio de seu construtor.

class PostController extends BaseController {

public function __construct()
{
// Exit if not ajax
$this
->beforeFilter('ajax', array('only' => 'store'));
// Exit if not a valid _token
$this
->beforeFilter('csrf', array('only' => 'store'));
}

public function store()
{
// Store like a boss
}

}

Agora, isso executará esses dois filtros sempre que o store()método for chamado. Se você quiser ter certeza de que esses filtros foram usados ​​em todas as chamadas para este controlador, basta omitir a matriz passada como o segundo parâmetro do beforeFilter()método.

É isso aí! Como você pode ver, colocar seus filtros em seus controladores em vez de em arquivos diferentes permite que você mantenha toda a lógica em seus controladores.