【问题标题】:How do I get ONLY the validated data from a laravel FormRequest?如何仅从 laravel FormRequest 中获取经过验证的数据?
【发布时间】:2018-06-04 19:15:27
【问题描述】:

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

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(),它会给我所有数据,包括不打算传递的额外垃圾数据。

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...) 的情况下获取经过验证的数据?

【问题讨论】:

    标签: php laravel validation request-validation


    【解决方案1】:

    $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',
        ]);
    
    }
    

    【讨论】:

    • 我想通了,但我会支持你的,因为你打败了我。 :)
    • 应该有办法在没有 FormRequest 的情况下做同样的事情
    【解决方案2】:

    好的...在我花时间输入这个问题之后,我想我会检查 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())]);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 1970-01-01
      • 2019-12-14
      • 2016-06-30
      • 2015-10-04
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多