Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть маршрут:
Route::resource('users', 'UserController');
В контроллере UserController есть методы на создание и редактирование
public function store(UserRequest $request)
{
$user = new User;
$user->name = $request['name'];
$user->email = $request['email'];
$user->password = \Hash::make($request['password']);
$user->save();
return redirect('users');
}
public function update($id, UserRequest $request)
{
$user = User::find($id);
$user->update($id, $request->all());
return redirect('users');
}
Они используют UserRequest в ктором прописаны следующие функции:
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|min:3',
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|alpha_num|min:6'
];
}
При создании пользователя все нормально, а вот при редактировании валидация не проходит, т.к. поле email должно быть уникальным, т.е. при редактировании присутствует поле email, которое уже заполнено существующим emai.
Вопрос заключается в следующем: как в UserRequest изменить rules так, чтобы при редактировании если поле email заполнено и принадлежит текущему пользователю, отменить проверку на email?
Второй вопрос заключается в изменении пароля, как в том же UserRequest при заполнении поля пароля провести проверку на password, а при оставлении пустым не изменять пароль, т.е. отменить проверку на password?
Не в сети
Не в сети
Нашел хороший способ, кстати описанный в документации. В файле UserRequest вместо
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|min:3',
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|alpha_num|min:6'
];
}
вставляем
public function authorize()
{
return true;
}
public function rules()
{
$id = $this->route('users');
return [
'name' => 'required|min:3',
'email' => 'required|email|unique:users,email,'.$id,
'password' => 'required|confirmed|alpha_num|min:6'
];
}
Здесь $id получает id пользователя из маршурта users/{users}, где {users} - наш id
далее для уникальных полей можно проигнорировать поле с конкретным id, в нашем случае все так и происходит.
Не в сети
Не работают правила валидации "alpha_num"
В описании "alpha_num" - Поле можно содержать только латинские символы и цифры.
По факту ввожу русские буквы и никаких ошибок нет, язык в app/config.php роли не играет
Как заставить пользователя вводить латинские буквы и цифры, а не русские?
Не в сети
Проблему валидации "alpha_num" решил заменой на регулярное выражение, получилось так:
'name' => 'required|min:3|regex:#^[aA-zZ0-9\-_]+$#',
Теперь можно ввести только латинские буквы, цифры, подчеркивания и тире
Изменено Johnson (26.03.2015 11:46:39)
Не в сети
Здесь $id получает id пользователя из маршурта users/{users}, где {users} - наш id
далее для уникальных полей можно проигнорировать поле с конкретным id, в нашем случае все так и происходит.
спасибо, очень помогло. Тоже столкнулся с такой проблемой)
Не в сети
Страницы 1