3-2-: agregar una ruta de recursos-Insertar registros
Insertar registros
Ahora vamos a comenzar creando nuestro nuevo usuario. Por empezar vamos a crear las dos acciones que nos permitirán realizar esto, create() para mostrar el formulario:
public function create() {
$user = new User();
return View::make('users.save')->with('user', $user);
}Y store() para crear un usuario con los datos del formulario enviado:
public function store() {
$user = new User();
$user->real_name = Input::get('real_name');
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));
$user->level = Input::get('level');
$user->active = true;
$user->save();
return Redirect::to('users')->with('notice', 'El usuario ha sido creado correctamente.');
}Gracias a la clase Input y al método get(), podemos recuperar los valores enviados desde los campos de formulario.
En la acción create() instanciamos un objeto nuevo User, y pasamos esta variable a la vista save.blade.php. Esto se debe a que esta vista será el formulario que permita insertar y modificar registros. En este caso el registro será nuevo así que los valores del objeto estarán vacíos.
Mientras que la acción store() recibirá los datos enviados de este formulario y guardará un nuevo registro. Finalmente redireccionará a la página principal pasándole un mensaje:
->with('notice', 'El usuario ha sido creado correctamente.');Para eso en la acción index las líneas:
@if(Session::has('notice'))
<p> <strong> {{ Session::get('notice') }} </strong> </p>
@endifEn este caso, luego de insertar un nuevo usuario, se mostrará por pantalla el texto: «El usuario ha sido creado correctamente.»
Modificar registros
Ahora vamos a crear los métodos para modificar un registro.
El método edit():
public function edit($id) {
$user = User::find($id);
return View::make('users.save')->with('user', $user);
}Y update():
public function update($id) {
$user = User::find($id);
$user->real_name = Input::get('real_name');
$user->email = Input::get('email');
$user->level = Input::get('level');
$user->save();
return Redirect::to('users')->with('notice', 'El usuario ha sido modificado correctamente.');
}Ambos reciben como parámetro el id para modificar el usuario.
El primero recuperará el id con el registro que se pasa como parámetro, y se lo pasará a la vista save.blade.php.
Y el segundo será el encargado de modificar el registro, enviado desde el formulario. También se redireccionará a la página principal con el mensaje «El usuario ha sido modificado correctamente.»
Bien, ahora que tenemos las acciones, vamos editar nuestra vista save.blade.php con el siguiente código:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title> Guardar usuario </title>
</head>
<body>
<h1> Guardar usuario </h1>
{{ Form::open(array('url' => 'users/' . $user->id)) }}
{{ Form::label ('real_name', 'Nombre real') }}
<br />
{{ Form::text ('real_name', $user->real_name) }}
<br />
{{ Form::label ('email', 'Email') }}
<br />
{{ Form::text ('email', $user->email) }}
<br />
@if($user->id)
{{ Form::hidden ('_method', 'PUT') }}
@else
{{ Form::label ('password', 'Contraseña') }}
<br />
{{ Form::password ('password') }}
<br />
@endif
{{ Form::label ('level', 'Nivel') }}
<br />
{{ Form::selectRange('level', 1, 5, array('selected' => $user->level) ) }}
<br />
{{ Form::submit('Guardar usuario') }}
{{ link_to('users', 'Cancelar') }}
{{ Form::close() }}
</body>
</html>Para entender este código primero debemos entender qué es un helper. Los helper son funciones que permiten imprimir código html, ésta es otra de las ventajas de blade.
Para abrir y cerrar el formulario usamos los métodos open() y close() de la clase Form. El método open() recibirá como parámetro la url dónde irá la petición, a la cual le pasamos el id del registro, id que se pasará vacío si el registro es nuevo.
También llamamos al método label() que recibirá dos parámetros, el primero será el atributo for y el segundo el texto que mostrará este etiqueta. Y también llamamos a otros métodos helper text() y password(), los cuales también recibirán dos parámetros, el primero será el valor del name y id, y el segundo el valor que tenga por defecto, el value. Como en este ejemplo tenemos un objeto nuevo, entonces los valores se pasarán nulos y los campos estarán vacíos, pero en el caso de la modificación del formulario, los campos se verán con los valores del registro.
Otro método que usamos en esta vista es selectRange(), que nos devolverá un select que tendrá un rango de números, que en nuestro caso será del 1 al 5, esto para poner el nivel de los usuarios. El primer parámetros será el valor del name y el id del select. El segundo y el tercer el rango, de qué número a qué numero. Y el último será el valor del selected, osea el valor por defecto.
Con respecto a las líneas:
@if($user->id)
{{ Form::hidden ('_method', 'PUT') }}
@else
{{ Form::label ('password', 'Contraseña') }}
<br />
{{ Form::password ('password') }}
<br />
@endifAquí preguntamos por el id del registro. Osea, si el id es algún valor, por ejemplo 1, entonces significa que el usuario está intentando modificar un registro existente, así que agregamos un campo oculto «_method» con el valor «PUT», éste es el que permitirá a nuestra aplicación indicarle que el se está intentando modificar el registo. Si en cambio el id no existe, osea, que el registro es nuevo, entonces le agregamos un campo para la contraseña del usuario, porque la contraseña sólo la crearemos cuando damos de alta al usuario.
Si querés ver más helper podés consultar la documentación de Laravel:
Ahora para acceder tanto al formulario para crear como para modificar, vamos a volver a nuestra vista index.blade.php y vamos a cambiar primero:
<p> Crear nuevo usuario </p>
Por:
<p> {{ link_to ('users/create', 'Crear nuevo usuario') }} </p>También en el listado de la tabla buscamos:
<td style="text-align: center;"> Editar </td>
Y la modificamos por:
<td style="text-align: center;"> {{ link_to('users/'.$item->id.'/edit', 'Editar') }} </td>Como se ve en ambos ejemplos, usamos un nuevo helper llamado link_to(), que dibujará un enlace. Sus parámetros son la ruta y el texto que debe mostrarse en el enlace.
Comentarios
Publicar un comentario