Variáveis na view
$that, $_component, $mad — auto-injetadas em todo MadComponent.
Toda view Blade renderizada por um MadComponent (via render())
recebe automaticamente um pequeno conjunto de variáveis — sem precisar declará-las
manualmente em view().
Variáveis sempre disponíveis
| Variável | O que é | Uso |
|---|---|---|
$that | Instância do próprio MadComponent ($this) | Acessar props públicas, chamar métodos — forma preferida |
$_component | Alias de $that | Idem (preferir $that) |
$__component | Alias legado de $that (compatibilidade) | Não usar em código novo — preferir $that |
$mad | Helper utilitário do MAD | Funções auxiliares de render |
| cada prop pública | Toda prop pública inicializada do componente | Disponível como variável solta ($titulo), além de $that->titulo |
Fonte: Mad\Component\MadComponent::render() — a view recebe o merge de
props públicas, dados de view(), contexto de render e as variáveis fixas:
array_merge($props, $viewData, $context, [
'_component' => $this,
'__component' => $this, // alias legado, mantido por compatibilidade
'that' => $this,
'mad' => $mad,
])
$__component existe, mas é legado
O array de merge injeta __component por compatibilidade com código
antigo que ainda o referencia. Não é erro usá-lo, mas em código novo prefira
sempre $that — é o nome estabelecido em toda a documentação e nos
componentes do framework.
Uso correto — $that
class MeuForm extends MadComponent
{
public array $estados = [];
public string $titulo = 'Cadastro';
public function onCarregar(): void
{
$this->estados = Estado::pluck('nome', 'id')->all();
}
protected function view(): string|array
{
return 'meu-form'; // SEM passar nada manualmente
}
}
<h1>{{ $that->titulo }}</h1>
<mad-btn mad:click="onCarregar">Carregar</mad-btn>
<mad-select-field name="estado_id" label="Estado" :items="$that->estados" />
Props públicas também chegam como variável solta
Além de $that->prop, toda prop pública inicializada do
componente é mesclada diretamente no escopo da view — então $titulo e
$that->titulo apontam para o mesmo valor:
MAD__BLADE_COMMENT__1__
<h1>{{ $titulo }}</h1>
<h1>{{ $that->titulo }}</h1> MAD__BLADE_COMMENT__2__
Na prática, a maioria das views usa $that->prop por clareza (deixa
explícito que o valor vem do componente), mas a variável solta funciona e às vezes é
mais conveniente em expressões curtas dentro de atributos :prop="...".
NUNCA fazer
// ERRADO: passar $this manualmente como __component (convenção pré-MadComponent)
protected function view(): string|array
{
return ['meu-form', ['__component' => $this]];
}
MAD__BLADE_COMMENT__3__
<mad-select-field :items="$__component->estados" />
MAD__BLADE_COMMENT__4__
<mad-select-field :items="$component->estados" />
MAD__BLADE_COMMENT__5__
<mad-select-field :items="$that->estados" />
Quando passar dados extras manualmente
Só é necessário passar dados que não são props públicas do
componente — geralmente arrays computados localmente dentro de view():
protected function view(): string|array
{
$tipos = ['F' => 'Física', 'J' => 'Jurídica'];
return ['meu-form', ['tipos' => $tipos]];
}
<mad-radio-field name="tipo" :options="$tipos" />
MAD__BLADE_COMMENT__6__
<h1>{{ $that->titulo }}</h1>
Isso é incomum — quase sempre é mais simples declarar o dado como prop pública do
componente e acessar via $that, em vez de retornar o array em
view().
Resumo
| Preciso... | Usar |
|---|---|
| Acessar prop pública do componente | $that->prop |
| Chamar método do componente no template | $that->metodo() |
| Passar dado computado só para o render | view(): ['view', ['x' => $x]] (raro) |
| Referenciar o componente por alias legado | $__component funciona, mas prefira $that |