Laravel иногда проверяющее правило не работает - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь внедрить правило проверки sometimes в один из моих проектов (Laravel 5.6).

У меня есть страница профиля, на которой пользователь может обновить свое имя и пароль, но я хочусделайте так, чтобы, если пользователь не вводит пароль, он не будет обновлять это поле, что, как я думал, иногда было правилом.

Полный метод обновления, который я использую в моем контроллере, приведен ниже.

Если я оставлю поле пароля пустым, оно вернет строку или минимальную ошибку, которую не следует делать.

public function update()
{
    $user = Auth::user();

    $this->validate(request(), [
        'name' => 'required',
        'password' => 'sometimes|string|min:6'
    ]);

    $user->name = request('name');
    $user->password = bcrypt(request('password'));

    $user->save();

    return back();
}

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Проблема в том, что если вы оставите поле пароля пустым, оно все равно будет присутствовать в запросе.Но заполнено null

Попробуйте вместо этого:

public function update()
{
    $user = Auth::user();

    $this->validate(request(), [
        'name' => 'required',
        'password' => 'nullable|string|min:6'
    ]);

    $user->name = request('name');

    if(!is_null(request('password'))) {
        $user->password = bcrypt(request('password'));
    }

    $user->save();

    return back();
}
0 голосов
/ 30 мая 2018

Попробуйте добавить nullable в правиле валидации

$this->validate(request(), [
    'name' => 'required',
    'password' => 'sometimes|nullable|string|min:6'
]);

From Документы Laravel :

nullable

Поле может проверятьсябыть нулевымЭто особенно полезно при проверке примитива, такого как строки и целые числа, которые могут содержать нулевые значения.

...