首页 > 解决方案 > Laravel FormRequest 验证规则

问题描述

在我的 Laravel 应用程序中,当有人编辑他们的个人资料并等待管理员批准时,他们无法再次编辑个人资料。在编辑用户个人资料时,我需要在 FormRequest 中实现此规则。

我的User模型hasMany配置文件,但我只使用活动配置文件,

public function profile()
{
    return $this->hasMany(Profile::class)->where('active', 1);
}

因此,当用户编辑配置文件时,我将插入到配置文件表中active = 0,并更新我的用户表中的标志“ profile_review_pending = 1

现在我需要的是我需要在 FormRequest 中定义一些规则,比如 if profile_review_pending =1then 不允许编辑。这可以使用存在或类似的东西来完成吗?

标签: laraveleloquentlaravel-validationlaravel-formrequest

解决方案


您需要定义自定义验证规则、实现Illuminate\Contracts\Validation\Rule接口或使用闭包。然后在验证器中直接使用自定义规则。

use Illuminate\Contracts\Validation\Rule;

class ReviewPendingValidationRule implements Rule
{
    public function passes($attribute, $value)
    {
        return $value == 1;
    }

    public function message()
    {
        return ':Review is pending';
    }
}

在您的控制器中

public function store()
{
    $this->validate(request(), [
        'profile_review_pending' => [new ReviewPendingValidationRule]
    ]);
}

推荐阅读