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 :).