O CodeIgniter 4 é um framework PHP moderno, leve e poderoso, amplamente utilizado para o desenvolvimento de aplicações web. Uma das funcionalidades importantes oferecidas por ele são os filtros, que permitem interceptar e manipular requisições HTTP antes ou depois que elas atinjam o controlador. Os filtros são extremamente úteis para tarefas como autenticação, autorização, validação de dados e aplicação de regras de segurança.
Neste artigo, vamos explorar como configurar e usar filtros no CodeIgniter 4 de forma eficiente.
Filtros são camadas intermediárias que podem ser aplicadas às requisições HTTP em uma aplicação CodeIgniter 4. Eles permitem que você execute lógica personalizada antes que a requisição chegue ao controlador ou depois que a resposta seja enviada ao cliente. Por exemplo, você pode usar um filtro para verificar se um usuário está autenticado antes de permitir o acesso a uma rota específica.
Os filtros no CodeIgniter 4 são configurados no arquivo Config/Filters.php. Este arquivo contém uma classe chamada Filters, onde você pode registrar filtros globais, filtros por rota e filtros específicos.
A classe Filters possui as seguintes propriedades principais:
Aqui está um exemplo básico de como o arquivo Filters.php é estruturado:
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Filters extends BaseConfig
{
public $aliases = [
'auth' => \App\Filters\AuthFilter::class,
'csrf' => \CodeIgniter\Filters\CSRF::class,
];
public $globals = [
'before' => [
'csrf',
],
'after' => [
// Nenhum filtro global "after" por padrão
],
];
public $methods = [];
public $filters = [];
}
Para criar um filtro personalizado, você precisa implementar a interface CodeIgniter\Filters\FilterInterface. Essa interface exige que você defina dois métodos: before() e after().
Vamos criar um filtro chamado AuthFilter para verificar se o usuário está autenticado.
App/Filters/AuthFilter.php:namespace App\Filters;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
// Verifica se o usuário está logado
if (!session()->get('isLoggedIn')) {
// Redireciona para a página de login
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// Não faz nada após a resposta
}
}
Config/Filters.php:public $aliases = [
'auth' => \App\Filters\AuthFilter::class,
];
app/Config/Routes.php:$routes->group('admin', ['filter' => 'auth'], function($routes) {
$routes->get('dashboard', 'AdminController::dashboard');
});
No exemplo acima, o filtro auth será aplicado a todas as rotas dentro do grupo admin.
Se você quiser aplicar um filtro a todas as requisições da sua aplicação, pode configurá-lo como global no arquivo Filters.php.
O CodeIgniter 4 já vem com um filtro CSRF (Cross-Site Request Forgery) integrado. Para habilitá-lo globalmente:
public $globals = [
'before' => [
'csrf',
],
];
Isso garante que todas as requisições da sua aplicação sejam protegidas contra ataques CSRF.
Você também pode aplicar filtros com base no método HTTP usado na requisição. Por exemplo:
public $methods = [
'post' => ['csrf'],
];
No exemplo acima, o filtro CSRF será aplicado apenas às requisições POST.
Os filtros também podem ser usados após a execução do controlador, permitindo que você manipule a resposta antes de enviá-la ao cliente.
Você pode criar um filtro para adicionar cabeçalhos personalizados à resposta:
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
$response->setHeader('X-Custom-Header', 'MyValue');
}
Os filtros no CodeIgniter 4 são ferramentas poderosas para gerenciar o fluxo de requisições na sua aplicação. Com eles, você pode implementar autenticação, autorização, proteção contra CSRF e muito mais de forma eficiente e organizada.
Ao usar filtros, é importante planejar bem sua aplicação para evitar sobrecarga desnecessária e garantir que os filtros sejam aplicados nas rotas corretas. Com as práticas adequadas, você terá uma aplicação segura, escalável e fácil de manter.
Se você ainda não experimentou os filtros no CodeIgniter 4, agora é o momento! Comece criando seus próprios filtros e explore todo o potencial dessa funcionalidade.