Beruflich Dokumente
Kultur Dokumente
Route::get('invoice/edit/{id}', 'InvoiceController@edit');
Ahora bien, la accin del controlador podra ser codificada de la siguiente forma:
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$invoice = invoice::findOrFail($id);
$this->authorize('edit', $invoice);
return view('invoices.edit')
->with('invoice', $invoice);
}
Esto nos refiere, que para cada accin en particular, tenemos que injectar el ID, luego
obtener el modelo relacionado al ID proporcionado. Laravel nos provee otra forma de
resolver este dilema, con el Route Model Binding que implementa un mtodo
conveniente, automticamente podemos inyectar la instancia del modelo directamente en
las rutas.
Implicita
Existe la forma implicita, en la cual Laravel automaticamente resuelve el modelo
Eloquent definido en las rutas o las acciones del controlador, cuyos nombres de variable
sugeridos por tipo coincidan con el nombre de segmento de la ruta, por ejemplo:
Como la variable $user es declarada del tipo modelo Eloquent App\User y el nombre de
la variable $user corresponde al valor de segmento URI {user}, Laravel
automaticamente inyectar la instancia del modelo que tenga un ID igual al que se enva
en URI. Si por algn motivo no se encuentra el ID, se lanzar un error 404.
Explicita
Para registrar la forma explicita, hay que usar el metodo model en la ruta y especificar la
clase para el parametro dado. Se puede definir las formas explicitas en el metodo boot de
la clase RouteServiceProvider.
Route::model('user', App\User::class);
}
Asi, como hemos atado el parametro {user} al model App\User, una instacia de User
ser injectado a la ruta. Entonces, por ejemplo, se podra llamar la ruta profile/1, lo cual
injectar la instancia User desde la base de datos donde el ID sea 1. Al igual que la
forma implicita, sino se encuentra una instancia para el ID dado, se lanzar un error
HTTP 404.