Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 20.03.2015 09:56:30

Изменение данных пользователя

Есть маршрут:

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?

Не в сети

#2 20.03.2015 10:10:54

Re: Изменение данных пользователя

я думаю проверку на уникальность емейла надо вынести из формреквеста и проводить в экшене. то же самое с паролем при апдейте — если он пустой, то передавать PHP$request->except('password')

Не в сети

#3 20.03.2015 13:00:44

Re: Изменение данных пользователя

Нашел хороший способ, кстати описанный в документации. В файле 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, в нашем случае все так и происходит.

Не в сети

#4 25.03.2015 16:50:13

Re: Изменение данных пользователя

Не работают правила валидации "alpha_num"
В описании "alpha_num" - Поле можно содержать только латинские символы и цифры.
По факту ввожу русские буквы и никаких ошибок нет, язык в app/config.php роли не играет
Как заставить пользователя вводить латинские буквы и цифры, а не русские?

Не в сети

#5 26.03.2015 11:46:01

Re: Изменение данных пользователя

Проблему валидации "alpha_num" решил заменой на регулярное выражение, получилось так:

'name' => 'required|min:3|regex:#^[aA-zZ0-9\-_]+$#',

Теперь можно ввести только латинские буквы, цифры, подчеркивания и тире

Изменено Johnson (26.03.2015 11:46:39)

Не в сети

#6 30.03.2015 19:14:43

Re: Изменение данных пользователя

Johnson пишет:

Здесь $id получает id пользователя из маршурта users/{users}, где {users} - наш id
далее для уникальных полей можно проигнорировать поле с конкретным id, в нашем случае все так и происходит.

спасибо, очень помогло. Тоже столкнулся с такой проблемой)

Не в сети

Подвал раздела