Laravel 在验证之后和发送到控制器之前修改请求数据
我正在使用Laravel的FormRequest进行验证,以使我的代码在controller中保持干净,在验证之后,我想向请求中添加一些数据,然后保存它。所以,我只是在寻找一个解决方案,这样我就不必向控制器中的请求添加数据,如果在同一个文件中进行验证之后,可能会有修改数据并发送到控制器的额外功能。如果您想在请求验证后对其进行处理,那么可以使用apokryfos建议的方法 但是我认为将钩子放在Laravel 在验证之后和发送到控制器之前修改请求数据,laravel,laravel-5,request,Laravel,Laravel 5,Request,我正在使用Laravel的FormRequest进行验证,以使我的代码在controller中保持干净,在验证之后,我想向请求中添加一些数据,然后保存它。所以,我只是在寻找一个解决方案,这样我就不必向控制器中的请求添加数据,如果在同一个文件中进行验证之后,可能会有修改数据并发送到控制器的额外功能。如果您想在请求验证后对其进行处理,那么可以使用apokryfos建议的方法 但是我认为将钩子放在FormRequest子类中更方便一些 祖先: use Illuminate\Foundation\Htt
FormRequest
子类中更方便一些
祖先:
use Illuminate\Foundation\Http\FormRequest;
class AncestorRequest extends FormRequest
{
...
protected function getValidatorInstance()
{
return parent::getValidatorInstance()->after(function ($validator) {
$this->after($validator);
});
}
protected function after($validator)
{
//
}
}
class DescendantRequest extends AncestorRequest
{
...
public function after($validator)
{
// do your things
}
}
后代:
use Illuminate\Foundation\Http\FormRequest;
class AncestorRequest extends FormRequest
{
...
protected function getValidatorInstance()
{
return parent::getValidatorInstance()->after(function ($validator) {
$this->after($validator);
});
}
protected function after($validator)
{
//
}
}
class DescendantRequest extends AncestorRequest
{
...
public function after($validator)
{
// do your things
}
}
另外,我在Laravel 5.2中使用的这个解决方案。你可以找到更多的选择。试试你为什么要做这样的事情?你能用一个例子来解释吗?在控制器中,在验证之后,我不得不向请求添加一些数据,比如$request->request->add(['is_archived'=>1]);所以我想,如果我在FormRequest中做了这样的事情之后,从我为验证特定函数而创建的FormRequest文件中,我将不必向请求添加任何数据。对于更干净的代码,请求将从单个FormRequest文件进行验证和修改只是想在AncestorRequest类的after方法中请求我可以这样做,那么为什么要创建一个新的后代请求呢?是的,可以,但是如果你想用after钩子添加新请求,你应该在新请求中添加
getValidatorInstance
。再一次。如果我在回答中描述了您在祖先类中编写此方法,谢谢,得到了:)@SubhashDiwakar最后,您是如何在函数中添加一些数据以请求之后的?我像这样尝试了request()->merge(['key'=>'value'])代码>但是输入键
没有出现在控制器中:$request->input('key');//返回空的
@cawecoy我在为验证而创建的FormRequest文件中创建了一个新方法。我把它命名为dbColumns()。验证完成后,我从控制器调用这个函数$request->dbColumns(),并获得可以添加到数据库中的过滤数据