为什么在验证空字符串时,laravel验证无法正常工作?

时间:2018-10-25 05:18:17

标签: laravel validation laravel-5.7

简介:

我有一个用于验证空字符串的请求值。

代码:

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 :(得分:1)

根据您的情况,您必须将条件更改为:

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();  
}

答案 1 :(得分:0)

删除<input [(ngModel)]="staff_book_date" 条件。然后将if()规则添加到验证中。

required