Es habitual que al validar un formulario de usuarios por ejemplo, de cara al alta y a la modificación de un registro, comprobemos que no se puedan insertar emails duplicados en la base de datos. Si usamos los métodos estándar que usa Laravel para el alta y modificación sabremos que los datos nos llegan por POST cuando es un nuevo registro, y por PUT cuando es una modificación. Para ello en el request que usemos para validar los datos (en mi caso app\Http\Request\AdminUserRequest.php) pondremos las reglas de la siguiente forma:
public function rules() { switch($this->method()) { case 'POST': { /* es el alta de un usuario por lo que el email debe ser único y la contraseña obligatoria */ return [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|contrasena_segura', 'role' => 'required|in:superadmin,admin,user' ]; } case 'PUT': { /* es la modificación de un registro por lo que el email debe ser unico sin contarse a si mismo, y la contraseña no es obligatoria ya que si no existe el parámetro, no la vamos a modificar */ return [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users,email,'.$this->usuario, 'password' => 'confirmed|contrasena_segura', 'role' => 'required|in:superadmin,admin,user' ]; } default: return []; } }
0 Comentarios.