Route::get('mensajes/crear', ['as'=>'mensajes.create','uses'=>'MessagesController@create']);
Route::post('mensajes', ['as'=>'mensajes.store','uses'=>'MessagesController@store']);
Route::get('mensajes', ['as'=>'mensajes.index','uses'=>'MessagesController@index']);
Route::get('mensajes/{id}', ['as'=>'mensajes.show','uses'=>'MessagesController@show']);
Route::get('mensajes/{id}/edit', ['as'=>'mensajes.edit','uses'=>'MessagesController@edit']);
Route::put('mensajes/{id}', ['as'=>'mensajes.update','uses'=>'MessagesController@update']);
Route::delete('mensajes/{id}', ['as'=>'mensajes.destroy','uses'=>'MessagesController@destroy']);
todas las lineas anteriores, se pueden reemplazar por una sola linea:
Route::resource('mensajes','MessagesController');
si listamos todas las rutas de nuestro proyecto
php artisan route:list
veremos algo asi
ORM
representacion de una tabla como una clase
table messages = clase Message
por convencion las tablas en plural y la clase en singular
php artisan make:model Message
esto creara en App el archivo Message.php
Laravel relacionara automaticamente una tabla con el mismo nombre de la clase pero en plural.
(si se quiere tener una clase que no cumpla esta regla se puede
agregar la sgt propiedad
protected $table = 'nombre de la tabla';
)
entonces ahora en el controller reemplazamos el querybuilder con el modelo
en la funcion que lista los mensajes
//$messages = DB::table('messages')->get();
$messages = Message::all();
en la que crea un mensaje
Message::create($request->all());
claro que para que funcione (asi nos dara una error porque en la asignacion masiva de datos no encuentra un campo llamado _token, por ahora se lo quitamos y desactivamos la validacion por csfr
debemos tambien indicarle a laravel que campos vamos a permitir que se envien de modo masivo
(de otro modo manipulando el dom, se podran enviar campos como id que no queremos que se envien)
entonces en el modelo
protected $fillable = ['nombre','email','mensaje'];
laravel automaticamente le agrega los campos created_at y updated_at
y en los metodos que muestra un mensaje:
$message = Message::find($id);
claro que si se introduce un id que no existe nos va a dar una exception pues la vista por ejemplo de show va a querer acceder a las propiedades de un objeto nulo.
lo que se puede hacer es
$message = Message::findOrFail($id);
si no lo encuentra devuelve un error 404
podemos entonces ahora personalizar el error
en resources/views/errors
creamos 404.blade.php
<!DOCTYPE html>
<html>
<head>
<title>error</title>
</head>
<body>
No se pudo encontrar el recurso.
<a href="{{ route('home') }}">volver</a>
</body>
</html>
para la actualizacion:
$message = Message::findOrFail($id);
$message->update($request->all()) ;
se puede hacer en una linea
Message::findOrFail($id)->update($request->all()) ;
para la eliminacion:
Message::findOrFail($id)->delete() ;
No hay comentarios:
Publicar un comentario