Docs›Formulários›Variáveis na view
Formulários

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ávelO que éUso
$thatInstância do próprio MadComponent ($this)Acessar props públicas, chamar métodos — forma preferida
$_componentAlias de $thatIdem (preferir $that)
$__componentAlias legado de $that (compatibilidade)Não usar em código novo — preferir $that
$madHelper utilitário do MADFunções auxiliares de render
cada prop públicaToda prop pública inicializada do componenteDisponí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 renderview(): ['view', ['x' => $x]] (raro)
Referenciar o componente por alias legado$__component funciona, mas prefira $that

Próximos