MadRequest
Acesso a parâmetros HTTP via DI ou static API.
Mad\Http\MadRequest dá acesso tipado a parâmetros HTTP — instanciável (injeção
via type-hint em mount()/actions) ou via API estática consultável de qualquer
lugar (views, services, helpers). Inspirado no Request do Laravel, mas mais
enxuto e pensado para o ciclo de vida reativo do MadComponent.
Para o padrão de uso recomendado dentro de formulários (promover parâmetro de URL a
prop pública em mount()), ver
Formulários → MadRequest.
API de instância (injeção via DI)
Recebida com type-hint em mount() ou em qualquer action — o framework injeta
automaticamente os dados do request atual:
use Mad\Http\MadRequest;
class NegociacaoForm extends MadComponent
{
public int $negociacaoId = 0; // prop pública — sobrevive ao ciclo reativo (MadWire)
public function mount(MadRequest $request): void
{
$this->negociacaoId = $request->int('negociacao_id');
$nome = $request->string('nome', 'Sem nome');
$ativo = $request->bool('ativo', true);
}
}
| Método | Retorno | Descrição |
|---|---|---|
get($key, $default = null) | mixed | Valor cru, sem cast. |
int($key, $default = 0) | int | Cast para inteiro. |
string($key, $default = '') | string | Cast para string. |
float($key, $default = 0.0) | float | Cast para float. |
bool($key, $default = false) | bool | filter_var(..., FILTER_VALIDATE_BOOLEAN) — aceita '1', 'true', 'on', 'yes'. |
has($key) | bool | Existe e não é vazio (!empty()). |
exists($key) | bool | Existe, mesmo que vazio/null. |
all() | array | Todos os dados. |
only(['a','b']) | array | Subconjunto pelas chaves. |
except(['x']) | array | Tudo exceto essas chaves. |
files($key) | UploadedFile[] | Arquivos enviados no campo, sempre como lista 0..N. Campo ausente → []. |
file($key) | UploadedFile|null | Primeiro arquivo do campo (espelha Request::file() do Laravel). |
hasFile($key) | bool | true quando o campo trouxe ao menos um arquivo válido. |
O wire (mad-livewire.js) coleta todo input[type=file] do
wrapper no FormData, então $_FILES chega na action mesmo num
mad:click — files()/file()/hasFile()
existem para ler isso sem mexer em $_FILES cru. Ainda assim, o caminho
normal é declarar <mad-file-field>/<mad-multi-file-field>
com storage/model e chamar $this->form->save($registro):
o framework grava disco/banco, trata remoção na edição e sanitiza o nome. Use os
helpers só quando o destino do arquivo é fora do padrão (API externa, parser em memória).
Também suporta acesso como propriedade — $request->nome equivale a
$request->get('nome') (via __get/__isset), sem
cast e sem default customizável.
API estática (acesso global)
Útil fora do mount() — dentro de uma view Blade, um service, um helper, ou uma
action chamada via MadWire onde o request original não está mais disponível por DI:
use Mad\Http\MadRequest;
// Em qualquer lugar — Blade, service, helper, outro componente
MadRequest::getInt('negociacao_id');
MadRequest::getString('nome', 'default');
MadRequest::hasParam('id');
MadRequest::allParams();
| Método estático | Retorno | Descrição |
|---|---|---|
param($key, $default = null) | mixed | Valor cru. |
getInt($key, $default = 0) | int | Cast para inteiro. |
getString($key, $default = '') | string | Cast para string. |
getFloat($key, $default = 0.0) | float | Cast para float. |
getBool($key, $default = false) | bool | Mesma regra de bool() de instância. |
hasParam($key) | bool | Existe e não é vazio. |
allParams() | array | Merge de $_REQUEST capturado + todas as props públicas escalares do componente ativo. |
capture(array $data) | void | Sobrescreve/injeta dados capturados — usado em testes ou boot manual. |
reset() | void | Limpa o cache capturado — usar em testes (tearDown). |
Ordem de lookup do static
A API estática procura em duas fontes, nesta ordem:
-
Prop pública do
MadComponentativo (viaMadRenderContext::getComponent()) — só usada se o valor for "truthy" (nãonull/''/0/'0'), senão cai na fonte 2. Sobrevive ao ciclo reativo do MadWire porque entra no state serializado. -
$_REQUESTcapturado (lazy, na primeira chamada) — só reflete os parâmetros do primeiro GET/POST que abriu a página; numa action disparada pelo wire depois,$_REQUESTcontém apenasmad_state/mad_action, não mais os parâmetros originais.
class NegociacaoForm extends MadComponent
{
public int $negociacaoId = 0; // ← promovido a prop em mount()
public function mount(MadRequest $request): void
{
$this->negociacaoId = $request->int('negociacao_id');
}
public function onSave(): MadResponse
{
// No wire (action disparada depois do mount inicial), $_REQUEST NÃO
// tem mais 'negociacao_id' — só mad_state/mad_action. Mas a prop
// pública sobreviveu no state, então o static accessor a encontra:
$id = MadRequest::getInt('negociacao_id');
// ...
}
}
Se um parâmetro de URL precisa estar disponível em actions disparadas depois (não só
no primeiro render), atribua-o a uma prop pública dentro de mount().
Caso contrário, o lookup estático cai no $_REQUEST capturado, que não
reflete mais o parâmetro original após a primeira requisição.
Para testes
capture()/reset() permitem injetar dados fake sem precisar montar
um request HTTP real:
use Mad\Http\MadRequest;
class MeuComponenteTest extends TestCase
{
public function test_promove_param_para_prop(): void
{
MadRequest::capture(['id' => 42, 'tipo' => 'A']);
$componente = new MeuComponente();
$componente->mount();
$this->assertSame(42, $componente->id);
MadRequest::reset(); // limpa o cache estático entre testes
}
}