Php 拉威尔5.7。路由模型绑定验证
我想使用sweet Laravel模型绑定,然后对模型本身运行一些复杂的验证检查 差不多Php 拉威尔5.7。路由模型绑定验证,php,laravel,laravel-5,eloquent,laravel-validation,Php,Laravel,Laravel 5,Eloquent,Laravel Validation,我想使用sweet Laravel模型绑定,然后对模型本身运行一些复杂的验证检查 差不多 Route::post('/dosomething/{something}','SomeController@store'); 及 我假设传递给每个规则的$value将是App\Something类的一个实例 有可能做到这一点吗 我能想到的最接近的选项是传递模型的id,然后在每个规则实例中运行App\Some::find($value),但这会降低性能,并且不可扩展 答复 不,这是不可能的,因为x,y,z,
Route::post('/dosomething/{something}','SomeController@store');代码>
及
我假设传递给每个规则的$value
将是App\Something
类的一个实例
有可能做到这一点吗
我能想到的最接近的选项是传递模型的id
,然后在每个规则实例中运行App\Some::find($value)
,但这会降低性能,并且不可扩展
答复
不,这是不可能的,因为x,y,z,试试a,b,c
也将被接受 您可以在RouteServiceProvider
中创建自定义绑定,如下所示:
public function boot()
{
parent::boot();
Route::bind('something', function ($value) {
$instance = Model::find($value) ?? abort(404);
$validator = Validator::make([
'something' => $instance,
], [
'something' => [
new MyFirstVeryComplexRule,
new MySecondVeryComplexRule,
new MyThirdVeryComplexRule
]
]);
if ($validator->errors()->any()) {
// perform on error tasks
}
return $instance;
});
}
然后每个规则的$value
将接收模型的实例
有关更多信息,您可以查看路由模型绑定下的自定义解析逻辑:
public function boot()
{
parent::boot();
Route::bind('something', function ($value) {
$instance = Model::find($value) ?? abort(404);
$validator = Validator::make([
'something' => $instance,
], [
'something' => [
new MyFirstVeryComplexRule,
new MySecondVeryComplexRule,
new MyThirdVeryComplexRule
]
]);
if ($validator->errors()->any()) {
// perform on error tasks
}
return $instance;
});
}