Laravel 5使用参数进行表单请求验证

Dip*_*ung 7 laravel laravel-5

我正在使用表单请求验证,并且有一些规则需要外部值作为参数.

以下是我在表单请求类中编辑业务配置文件的验证规则,

public function rules()
{
    return [
        'name' => 'required|unique:businesses,name,'.$business->id,
        'url' => 'required|url|unique:businesses'
    ];
}
Run Code Online (Sandbox Code Playgroud)

我可以通过类型提示它在控制器上使用它.

公共职能postBusinessEdit(BusinessEditRequest $ request,Business $ business){

}

但是如何将$ business对象作为参数传递给rules方法?

pin*_*sia 9

有很多方法可以实现这一目标.我这样做如下.

您可以在商业表单中使用隐藏字段"id",如下图所示,

{!! Form::hidden('id', $business->id) !!}
Run Code Online (Sandbox Code Playgroud)

你可以idFormRequest下面检索这个,

public function rules()
{
    $businessId = $this->input('id');

    return [
        'name' => 'required|unique:businesses,name,'.$businessId,
        'url' => 'required|url|unique:businesses'
    ];
}
Run Code Online (Sandbox Code Playgroud)


sha*_*ddy 6

让我们说这是你的模型绑定:

$router->model('business', 'App\Business');
Run Code Online (Sandbox Code Playgroud)

然后你可以BusinessFormRequest对象中引用类,如下所示:

public function rules()
{
    $business = $this->route()->getParameter('business');
    // rest of the code
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您在创建和更新验证时使用表单请求,则在创建记录时,业务变量将是null因为您的对象尚不存在.因此,在引用对象属性或方法之前,请务必进行必要的检查.


Fab*_*Chn 5

对于那些切换到 Laravel 5 的人:

public function rules()
{
    $business = $this->route('business');
    // rest of the code
}
Run Code Online (Sandbox Code Playgroud)