我正在使用表单请求验证,并且有一些规则需要外部值作为参数。
以下是我在表单请求类中编辑业务配置文件的验证规则,
public function rules()
{
return [
'name' => 'required|unique:businesses,name,'.$business->id,
'url' => 'required|url|unique:businesses'
];
}
我可以通过提示类型在控制器上使用它。
公共职能postBusinessEdit(BusinessEditRequest $ request,Business $ business) {
}
但是如何将$ business对象作为参数传递给rules方法?
答案 0 :(得分:9)
可以通过多种方式实现这一目标。我这样做。
您可以在商家表单中使用隐藏字段“id”,例如bellow,
{!! Form::hidden('id', $business->id) !!}
您可以在id
中检索此FormRequest
,如下所示
public function rules()
{
$businessId = $this->input('id');
return [
'name' => 'required|unique:businesses,name,'.$businessId,
'url' => 'required|url|unique:businesses'
];
}
答案 1 :(得分:5)
让我们说这是你的模型绑定:
$router->model('business', 'App\Business');
然后您可以在Business
对象中引用FormRequest
类,如下所示:
public function rules()
{
$business = $this->route()->getParameter('business');
// rest of the code
}
请注意,如果您在创建和更新验证时使用表单请求,则在创建记录时,业务变量将为null
,因为您的对象尚不存在。因此,在引用对象属性或方法之前,请务必进行必要的检查。
答案 2 :(得分:2)
对于那些转向laravel 5的人:
public function rules()
{
$business = $this->route('business');
// rest of the code
}
答案 3 :(得分:1)
至少在Laravel 5.5中(未检查旧版本),一旦你做了明确的绑定(https://laravel.com/docs/5.5/routing#route-model-binding),你就可以通过$ this直接得到你的模型:
http://localhost/myapp/index.php/usuarios/login
答案 4 :(得分:0)
假设我们想要更改验证规则的情况取决于我们传入路由的type
。例如:
app.dev/business/{type}
对于不同类型的业务,我们有不同的验证规则。我们需要做的就是在控制器方法上键入提示请求。
public function store(StoreBusiness $request)
{
// The incoming request is valid...
}
对于自定义表单请求
class StoreBussiness extends FormRequest
{
public function rules()
{
$type = $this->route()->parameter('type');
$rules = [];
if ($type === 'a') {
}
return rules;
}
}
答案 5 :(得分:0)
从Laravel 5.6开始,您可以在rules方法中键入提示:
public function rules(Business $business)
{
return [
'name' => 'required|unique:businesses,name,'.$business->id,
'url' => 'required|url|unique:businesses'
];
}
有关更多信息,请参见docs
您可以在rules方法的签名中键入所需的任何依赖项。它们将通过Laravel服务容器自动解决。