Почему проверка правильности laravel не работает правильно при проверке пустой строки? - PullRequest
0 голосов
/ 25 октября 2018

Краткое описание:

У меня есть значение запроса подтверждения для пустой строки.

Код:

if(isset($request->name)) {
    $this->validate($request, [
        'name' => [
            function ($attribute, $value, $fail) {
                if (mb_strlen(preg_replace('/\s/', '', $value)) == 0) {
                    $fail($attribute.' is can't be empty.');
                }
            }
        ]
    ]);
    $user->name = $request->name;
    $user->save(); 
}

Такжеустал от правила катома.

Код правила:

public function passes($attribute, $value)
{
    $result = preg_replace('/\s/', '', $value);
    return mb_strlen($result) == 0 ? false : true;
}

/**
 * Get the validation error message.
 *
 * @return string
 */
public function message()
{
    return "Attribute value can't be empty string.";
}

Код проверки правила:

if(isset($request->name)) {
    $this->validate($request, [
        'name' => [
            new IsEmptyString
        ]
    ]);
    $user->name= $request->name;
    $user->save(); 
}

Вопрос:

Где у меня ошибки?Почему laravel не отправляет сообщение об ошибке проверки, когда я проверяю значение запроса на пустую строку?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

В вашей ситуации вы должны изменить свое условие на:

if(array_key_exists('name', $request->all())) {

}

Когда вы проверяете isset($request->name) и результат этого условия возвращает false , а код проверки даже не запускается иза то, что условия вернули false.

Как правило, ваш рабочий код выглядит следующим образом:

if(array_key_exists('name', $request->all())) {
    $this->validate($request, [
        'name' => [
            'required',
            function ($attribute, $value, $fail) {
                if (mb_strlen(preg_replace('/\s/', '', $value)) == 0) {
                    $fail($attribute." is can't be empty.");
                }
            }
        ]
    ]);

    $user->name = $request->name;
    $user->save();  
}
0 голосов
/ 25 октября 2018

Удалить условие if().а затем добавьте правило required к проверке.

$this->validate($request, [
    'name' => ['required',
        function ($attribute, $value, $fail) {
            if (mb_strlen(preg_replace('/\s/', '', $value)) == 0) {
                $fail($attribute.' is can't be empty.');
            }
        }
    ]
]);
$user->name = $request->name;
$user->save(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...