Skip to content

Entedendo Injeção de Dependência Básica no Laravel 9x

Para explicar vamos ver o código abaixo:

public function edit(CadastroProdutos $produto) //lembrando que ele passa 
{
    return view('produtos.edit')->with('produtos', $produto);
}

Estamos assumindo que seu resource opera em produtos, correto? E que $produto é um parâmetro de URL na sua url nomeada que opera assim:

/produtos/edit/{$produto} e que na verdade vai ficar assim na sua url oficial:

http(OU https)://localhost (ou um domínio ou ip)/produtos/22/edit

Esse 22 é fictício.

A magia por baixo do capô é interessante, o Laravel coloca no singular a sua url de base, no caso /produtos ele vai entender por /produtos/id/edit e o argumento VEM NO SINGULAR ao ponto que produto no argumento da função pode ser também ao invés do tipo CadastroProdutos ser apenas um int $produto porque vem um ID inteiro no padrão.

A Sacada de usar a model CadastroProdutos como tipo de dado de $produto é que AUTOMAGICAMENTE o Elloquent vai buscar dessa model CadastroProdutos esse id que veio e já vai entregar uma instância dela com informações achadas daquele ID!

Isso evita que façamos uma chamada da classe e depois uma requisição de todos os dados para depois passarmos eles como parâmetro.

Quando digo CadastroProdutos $produto é literalmente o mesmo que dizer:

Instancie a classe CadastroProdutos, vá buscar toda informação pelo id $produto, sendo mais detalhista ainda ---> select * from CadastroProdutos where id=$produto;

O retorno é construído dentro de uma instância de objeto associativa, em resumo, ORM puro :).

E aí, na hora de chamarmos nossa view informar esse objeto associativo:

<form :action="route('produtos.update', $produto->id)" :nome="$produto->nome" />

Feito isso no form de atualização no exemplo da action update ele já tem as informações vitais do produto de id especificado :).
Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.