Laravel 在验证之后和发送到控制器之前修改请求数据

Laravel 在验证之后和发送到控制器之前修改请求数据,laravel,laravel-5,request,Laravel,Laravel 5,Request,我正在使用Laravel的FormRequest进行验证,以使我的代码在controller中保持干净,在验证之后,我想向请求中添加一些数据,然后保存它。所以,我只是在寻找一个解决方案,这样我就不必向控制器中的请求添加数据,如果在同一个文件中进行验证之后,可能会有修改数据并发送到控制器的额外功能。如果您想在请求验证后对其进行处理,那么可以使用apokryfos建议的方法 但是我认为将钩子放在FormRequest子类中更方便一些 祖先: use Illuminate\Foundation\Htt

我正在使用Laravel的FormRequest进行验证,以使我的代码在controller中保持干净,在验证之后,我想向请求中添加一些数据,然后保存它。所以,我只是在寻找一个解决方案,这样我就不必向控制器中的请求添加数据,如果在同一个文件中进行验证之后,可能会有修改数据并发送到控制器的额外功能。如果您想在请求验证后对其进行处理,那么可以使用apokryfos建议的方法

但是我认为将钩子放在
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(),并获得可以添加到数据库中的过滤数据