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.
O Que São Filtros?
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.
Configurando Filtros no CodeIgniter 4
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.
Estrutura Básica do Arquivo Filters.php
A classe Filters
possui as seguintes propriedades principais:
- aliases: Define apelidos para os filtros.
- globals: Configura filtros globais que serão aplicados a todas as requisições.
- methods: Especifica filtros aplicados com base no método HTTP (GET, POST, etc.).
- filters: Permite associar filtros a rotas específicas.
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 = [];
}
Criando um Filtro Personalizado
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()
.
Exemplo: Criando um Filtro de Autenticação
Vamos criar um filtro chamado AuthFilter
para verificar se o usuário está autenticado.
- Crie o arquivo do filtro em
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
}
}
- Registre o filtro no arquivo
Config/Filters.php
:
public $aliases = [
'auth' => \App\Filters\AuthFilter::class,
];
- Aplique o filtro a rotas específicas no arquivo
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
.
Filtros Globais
Se você quiser aplicar um filtro a todas as requisições da sua aplicação, pode configurá-lo como global no arquivo Filters.php
.
Exemplo: Aplicando CSRF Globalmente
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.
Filtros por Método HTTP
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.
Filtros Pós-Requisição
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.
Exemplo: Adicionando Cabeçalhos à Resposta
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');
}
Conclusão
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.