簡體   English   中英

Laravel 驗證失敗時將FormRequest中的數據傳輸到Controller

[英]Laravel Transfer data from FormRequest to Controller when Validation Fails

目前,我正在嘗試使用 Form Request 並將邏輯從 controller 中分離出來進行驗證。不利的一面是文檔不清楚當驗證實例失敗並且我被重定向回時我應該如何將狀態傳遞回 controller。 我正在嘗試將圖像臨時存儲在服務器內,以便在驗證失敗時將保存的圖像顯示回用戶。

這是我的 controller 的一部分:

protected function session_data(Request $request, $id = null)
{
    // process $data
    return $data;
}


//view model of edit page
public function edit(Request $request, $id)
{
    if ($request->session()->has('_old_input')) {
        $data = $this->session_data($request, $id);
    } else { // get session data if exists, or search the db.
        $data = Seminar::index_list($id)[0];
    }
        
    return view('exhibitor.seminar.edit')
           ->with('entry', $data);
}


// logic to handle post request from edit page
public function update(SeminarEditRequest $request) //validate post request
{
    return 'stub';
}

用戶put發出update請求。 如果驗證失敗,它將重定向回edit方法。

默認情況下,當用戶發出update方法的 post/put 請求並且未滿足SeminarEditRequest中定義的規則時,包含有關先前表單數據信息的_old_input session 鍵的實現不會包含有關上傳文件的信息。 我的問題是如何在SeminarEditRequest.php中傳遞(和存儲)有關上傳文件的信息?

這是一個老問題,但我想發布一個答案。 當我們想從 FormRequest 發送數據到 Controller 時,我們可以使用 session flash。例如;


use Illuminate\Contracts\Validation\Validator;

class EditRequest extends FormRequest
{

    // ...

    protected function failedValidation(Validator $validator)
    {
        $transferObject = (object)[
            'test' => true
        ];

        $this->session()->flash('transfer_data_key', $transferObject);
    }

}
class TestController extends Controller
{
    public function edit(EditRequest $req)
    {
        dd($req->session()->get('transfer_data_key'));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM