web-dev-qa-db-ja.com

laravel FormRequestから検証済みデータのみを取得するにはどうすればよいですか?

次のカスタムリクエストがあるとしましょう。

_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 [〜#〜]データが得られます。 tは渡されることを意味しました。

_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...)を実行せずに、検証済みのデータを取得するにはどうすればよいですか?[〜#〜] only [〜#〜]

6
JonTroncoso

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

}
_
15
Sapnesh Naik

OK ...この質問を入力するのに時間を費やした後、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())]);
}
5
JonTroncoso