验证特定规则-Laravel

时间:2019-04-20 23:23:05

标签: laravel

我正在使用最新的Laravel版本。

我有requests/StoreUser.php

public function rules() {
    return [
        'name' => 'required||max:255|min:2',
        'email' => 'required|unique:users|email',
        'password' => 'required|max:255|min:6|confirmed'
    ];
}

用于创建用户。

现在我需要并更新用户,但是如何仅执行特定规则?

例如,如果未提供name,而仅提供了email,我如何仅对电子邮件运行验证?

3 个答案:

答案 0 :(得分:2)

这比您想象的要容易。使规则取决于HTTP方法。这是我的工作示例。

public function rules() {
    // rules for updating record
    if ($this->method() == 'PATCH') {
        return [
            'name' => 'nullable||max:255|min:2', // either nullable or remove this line is ok
            'email' => 'required|unique:users|email',
        ];
    } else {
    // rules for creating record
        return [
            'name' => 'required||max:255|min:2',
            'email' => 'required|unique:users|email',
            'password' => 'required|max:255|min:6|confirmed'
        ];
    }

}

答案 1 :(得分:1)

您可以将StoreUser请求与CreateUserRequest和UpdateUserRequest分开,以应用不同的验证规则。我认为,这种分离使您的代码更具可读性和可理解性。

答案 2 :(得分:1)

laravel中的任何HttpValidation请求都将FormRequest扩展到Request,因此您始终可以检查请求,身份验证,会话等...

因此您可以在规则功能内检查请求类型

class AnyRequest extends FormRequest
{
    public function rules()
    {
        if ($this->method() == 'PUT'){
            return [

            ]
        }
        if ($this->method() == 'PATH') {
            return [

            ]
        }
    }
}

如果事情变得复杂,您可以创建一个专用的新HttpValidation请求PostRequest PatchRequest

class UserController extends Controller
{
    public function create(CreateRequest $request)
    {

    }

    public function update(UpdateRequest $request)
    {

    }
}

另请参阅Laravel文档: