我正在使用表单请求验证,并且有一些规则需要外部值作为参数.
以下是我在表单请求类中编辑业务配置文件的验证规则,
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方法?
有很多方法可以实现这一目标.我这样做如下.
您可以在商业表单中使用隐藏字段"id",如下图所示,
{!! Form::hidden('id', $business->id) !!}
Run Code Online (Sandbox Code Playgroud)
你可以id在FormRequest下面检索这个,
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)
让我们说这是你的模型绑定:
$router->model('business', 'App\Business');
Run Code Online (Sandbox Code Playgroud)
然后你可以Business在FormRequest对象中引用类,如下所示:
public function rules()
{
$business = $this->route()->getParameter('business');
// rest of the code
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在创建和更新验证时使用表单请求,则在创建记录时,业务变量将是null因为您的对象尚不存在.因此,在引用对象属性或方法之前,请务必进行必要的检查.
对于那些切换到 Laravel 5 的人:
public function rules()
{
$business = $this->route('business');
// rest of the code
}
Run Code Online (Sandbox Code Playgroud)