Handlers
v4Na v4, handlers substituem controllers. Estendem MUCRM\http\handler e retornam views ou JSON via res().
ℹ️Fluxo de resposta
$this->view() guarda path + dados. No __destruct, o engine renderiza o HTML com o layout definido.
Handler básico
namespace MUCRM\modules\billing\handlers;
use MUCRM\engine\support\{request, responder};
use MUCRM\http\handler;
class web_handler extends handler
{
protected string $layout = '_layouts.app';
public function index(request $req, responder $res)
{
$plans = billing_plan::query()->where('active', 1)->get();
return $this->view('Billing.index', compact('plans'))
->title('Planos');
}
public function store(request $req, responder $res)
{
$data = $req->check([
'plan_id' => 'required|numeric',
]);
// lógica de assinatura...
return $res->success('Plano ativado!')->to('user.panel');
}
}Injeção de dependências
// O dispatch resolve automaticamente:
public function show(request $req, responder $res, int $id)
{
$profile = profile::find_or_fail($id);
return $this->view('Profile.show', compact('profile'));
}| request | Singleton de input |
| responder | Builder de resposta (res()) |
| Parâmetros da rota | Injetados por nome ($id) |
Respostas
return $res->success('Salvo!')->back();
return $res->warning('Atenção')->to('user.settings');
return $res->error('Falhou')->back();JSON (API / AJAX)
public function tooltip(request $req, responder $res): void
{
$res->json(['html' => $html]);
}
// ou atalho:
json(['ok' => true]);Onde colocar handlers
| Local | Uso |
|---|---|
app/http/web/handlers/ | Páginas core do site |
app/http/admin/handlers/ | Admin core |
app/modules/{m}/handlers/ | Lógica do módulo |