首頁  >  問答  >  主體

在 Laravel 中使用 Illuminate\Foundation\Http\FormRequest 驗證取得通配符請求是否可行?

我有一條帶有通配符日期的 GET 路線。

這一天通配符是一個字串,如下所示:20220507 (YYYYMMDD)。

驗證字串後我希望做出正確的回應。在發送回應之前,我想驗證字串長度和格式。

我的問題是,是否可以使用 Illuminate\Foundation\Http\FormRequestIlluminate\Http\Request 驗證字串 製作:請求?還是他們只接受發布請求?

程式碼:

php artisan make:request CalendarDayRequest

web.php 中取得路由的範例

Route::get('/calendar/{day}' , 'App\Http\Controllers\HomeController@calendar')->name('calendar');

範例控制器

use App\Http\Requests\CalendarDayRequest; 
public function calendar ( CalendarDayRequest $request ) {
    // Code
}

或範例控制器 2

use Illuminate\Http\Request;

public function calendar ( Request $request ) {
    $validated = $request->validate([
        'day' => 'required',
     ]);
}

我都收到錯誤:無限重定向循環,重定向太多次。

P粉087951442P粉087951442179 天前367

全部回覆(1)我來回復

  • P粉706038741

    P粉7060387412024-03-28 09:30:04

    首先,您無法驗證表單要求中的路由參數

    但是,您可以使用正規表示式來驗證您的路線 範例:

    Route::get('/calendar/{day}', 'App\Http\Controllers\HomeController@calendar')
        ->name('calendar')
        ->where('day', '/^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/');
    

    如果您仍想使用validate()函數或表單請求

    $request->merge([
       'day' => $day
    ]);
    
    $this->validate($request, [
       'day' => 'date_format:Ymd',
    ]);
    

    表單請求方式 - 重寫 all() 方法

    public function all($k = null){
       $data = parent::all($k);
       $data['day'] = $this->route('day');
       return $data;
    }

    如果不起作用,請嘗試以下程式碼

    public function calendar(Request $request, $day){
     $data = $request->all();
     $data['day'] = $day; 
    
     $validator = Validator::make($data, [
       'day' => 'required|date_format:Ymd',
     ]);
      
     if($validator->fails()){
        // Do Something abort(404);
     }
    
    }

    Laravel 5 如何驗證路由參數?

    但是如果您想使用 validate() 函數,我建議您將其作為請求參數發送。

    回覆
    0
  • 取消回覆