如何从laravel FormRequest中只获取经过验证的数据?

kuhbmx9i  于 2023-01-18  发布在  其他
关注(0)|答案(3)|浏览(148)

假设我有以下自定义请求:

class PlanRequest extends FormRequest
{
    // ...

    public function rules()
    {

        return
        [
            'name'              => 'required|string|min:3|max:191',
            'monthly_fee'       => 'required|numeric|min:0',
            'transaction_fee'   => 'required|numeric|min:0',
            'processing_fee'    => 'required|numeric|min:0|max:100',
            'annual_fee'        => 'required|numeric|min:0',
            'setup_fee'         => 'required|numeric|min:0',
            'organization_id'   => 'exists:organizations,id',
        ];
    }
}

当我从控制器访问它时,如果我执行$request->all(),它会给我ALL数据,包括不打算传递的额外垃圾数据。

public function store(PlanRequest $request)
{
    dd($request->all());
    // This returns
    [
        'name'              => 'value',
        'monthly_fee'       => '1.23',
        'transaction_fee'   => '1.23',
        'processing_fee'    => '1.23',
        'annual_fee'        => '1.23',
        'setup_fee'         => '1.23',
        'organization_id'   => null,
        'foo'               => 'bar', // This is not supposed to show up
    ];
}

如何获得经过验证的数据,而无需手动执行$request->only('name','monthly_fee', etc...)

56lgkhnf

56lgkhnf1#

$request->validated()将仅返回经过验证的数据。

    • 示例:**
public function store(Request $request)
{
    $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    $validatedData = $request->validated();

}

替代溶液:

如果验证通过,$request->validate([rules...])只返回验证过的数据。

    • 示例:**
public function store(Request $request)
{
   
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

}
gkn4icbw

gkn4icbw2#

好的......在我花时间输入这个问题之后,我想我应该查看一下laravel“API”文档:https://laravel.com/api/5.5/Illuminate/Foundation/Http/FormRequest.html
看起来我可以使用$request->validated()。希望他们能在验证文档中这样说。这让我的控制器动作看起来相当流畅:

public function store(PlanRequest $request)
{
    return response()->json(['plan' => Plan::create($request->validated())]);
}
jhdbpxl9

jhdbpxl93#

这可能是一个旧的线程,有些人可能使用Validator类而不是使用validator() helper函数来请求。
对于属于后一种类型的用户,可以使用validated()函数从request中检索已验证值的数组。

$validator = Validator::make($req->all(), [
    // VALIDATION RULES
], [
    // VALIDATION MESSAGE
]);

dd($validator->validated());

这将返回通过验证的所有值的数组。
从Laravel 5.6开始,这才开始出现在文档中,但可能会在Laravel 5.2中出现

相关问题