簡體   English   中英

Laravel 表單請求在驗證后添加自定義變量

[英]Laravel Form Request Add Custom Variable After Validation

這是我的表單請求代碼,我想在驗證成功后添加新變量,這樣我就可以在我的控制器上訪問該變量:

class CouponRequest extends Request
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'start_year' => 'required',
            'start_month' => 'required',
            'start_day' => 'required',
            'start_time' => 'required',
            'finish_year' => 'required',
            'finish_month' => 'required',
            'finish_day' => 'required',
            'finish_time' => 'required',
        ];
    }

    public function afterValidation()
    {
        $this->start_date = Carbon::create( $this->start_year, $this->start_month, $this->start_day );
    }
}

所以在驗證沒有錯誤后,我可以在我的控制器上調用這個實例:

$request->start_date;

我可以這樣做嗎?

在您的表單請求中使用函數prepareForValidation()

protected function prepareForValidation(): void
    {
        $this->merge([
            'start_date' => Carbon::now()
        ]);
    }

干杯!

你可以這樣做

public function afterValidation()
{
    $this->request->add([
        'start_date' => Carbon::create($this->start_year, $this->start_month, $this->start_day)
    ]);
}

public function validate()
{
    parent::validate();

    $this->afterValidation();
}

然后訪問控制器中的屬性

$request->get('start_date');

我在控制器中進行了驗證。 該方法有一個“Request $request”參數。 我有一個我這樣做:

$input = $request->all();
$input['my_new_field] = 'the_data';

我在成功請求操作后使用此方法。

來源: 50116187/1101038

public function withValidator(Validator $validator)
{
    if ( $validator->fails() ) {

        \Log::info('Error! No Manipulation!');

    }else{

        $this->merge([
            'custom' => 'Test Manipulation!'
        ]);

        \Log::info('Success Manipulation!');
    }

}

以上所有方法都有效,但 IMO 我會覆蓋表單請求類中的passedValidation方法。 在通過驗證檢查后調用此方法,從而保持數據清潔。

例如。

public function passedValidation()
{
    $this->merge([
       'start_date' => Carbon::create( $this->start_year, $this->start_month, $this->start_day )
    ]));
}

如果您現在轉儲數據,您還應該看到新的 start_date 值。

暫無
暫無

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

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