Controllers
Em vez de definir toda a lógica de tratamento de requisições como funções de callback nas rotas, você pode preferir organizar esse comportamento usando classes 'controller'. Controllers podem agrupar a lógica de tratamento de requisições relacionadas em uma única classe.
Escrevendo Controllers
Controladores Básicos
Para gerar rapidamente um novo controlador, você pode executar o comando Line make:controller
. Por padrão, todos os controladores da sua aplicação gerados pelo comando são armazenados no diretório src/http/controllers
:
php line make:controller UserController
Um controller pode ter qualquer número de métodos públicos que irão responder às requisições HTTP recebidas:
namespace App\Http\Controllers;
use App\Models\User;
class UserController
{
/**
* Mostra o perfil de um usuário específico.
*/
public static function show($req, $res)
{
$id = $req->param('id');
return $res->view('user.profile', [
'user' => User::findOrFail($id)
]);
}
}
Depois de ter escrito uma classe de controlador e seu método, você pode definir uma rota para o método do controlador da seguinte forma:
use App\Http\Controllers\UserController;
$app->get('/user/:id', [UserController::class, 'show']);
Quando uma solicitação recebida corresponde à URI de rota especificada, o método show
da classe App\Http\Controllers\UserController
será invocado e os parâmetros de rota serão passados para o método.
Middlewares em Controllers
Middlewares também podem ser definidos diretamente nos controllers para aplicar lógica de pré-processamento ou pós-processamento em todas as rotas ou em um grupo específico de rotas. Isso permite centralizar a lógica de middleware diretamente na estrutura do controller.
namespace App\Http\Controllers;
class UserController
{
// ... Outros metódos
/**
* Middleware para verificar a autenticação.
*/
public static function loggedIn($req, $res, $next)
{
$authenticated = false; // Sua lógica de autenticação
if (!$authenticated) {
$res->redirect('/login');
}
$next();
}
}
Neste exemplo, o método loggedIn
age como middleware para verificar a autenticação antes de qualquer rota ser executada. Isso garante que apenas usuários autenticados possam acessar as rotas que usam esse middleware.
Depois de ter escrito seu middleware, você pode aplicá-lo em uma rota da seguinte forma:
use App\Http\Controllers\UserController;
$loggedIn = [UserController::class, 'loggedIn'];
$app->get('/user/:id', $loggedIn, [UserController::class, 'show']);
Isso garante que o middleware loggedIn seja executado antes do método show ser chamado para qualquer requisição na rota /user/:id
.
Os controllers no Lithe proporcionam uma maneira organizada e eficiente de gerenciar o tratamento de requisições HTTP. Ao centralizar a lógica relacionada aos seus recursos, você ganha em reutilização de código e facilita a manutenção do seu aplicativo.