Heim  >  Fragen und Antworten  >  Hauptteil

Ist es möglich, den Erhalt einer Wildcard-Anfrage mithilfe von Illuminate\Foundation\Http\FormRequest in Laravel zu überprüfen?

Ich habe eine GET-Route mit einem Platzhalter Datum.

Der Tagesplatzhalter ist eine Zeichenfolge wie diese: 20220507 (JJJJMMTT).

Nachdem ich die Zeichenfolge validiert habe, möchte ich eine korrekte Antwort. Bevor ich die Antwort sende, möchte ich die Länge und das Format der Zeichenfolge überprüfen.

Meine Frage ist, ist es möglich, die Zeichenfolge mit IlluminateFoundationHttpFormRequest oder IlluminateHttpRequest zu validieren Erstellt von: Anfrage? Oder akzeptieren sie nur Veröffentlichungsanfragen?

Code:

php artisan make:request CalendarDayRequest

Beispiel für das Abrufen von Routen in web.php

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

Probencontroller

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

oder Sample-Controller 2

use Illuminate\Http\Request;

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

Ich erhalte die Fehlermeldung: Endlose Weiterleitungsschleife, zu viele Weiterleitungen.

P粉087951442P粉087951442179 Tage vor369

Antworte allen(1)Ich werde antworten

  • 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() 函数,我建议您将其作为请求参数发送。

    Antwort
    0
  • StornierenAntwort