Maison  >  Questions et réponses  >  le corps du texte

Est-il possible de vérifier l'obtention d'une demande générique en utilisant Illuminate\Foundation\Http\FormRequest dans Laravel ?

J'ai un itinéraire GET avec un caractère générique Date.

Le caractère générique du jour est une chaîne comme celle-ci : 20220507 (AAAAMMJJ).

Après avoir validé la chaîne, je souhaite une réponse correcte. Avant d'envoyer la réponse, je souhaite vérifier la longueur et le format de la chaîne.

Ma question est la suivante : est-il possible de valider la chaîne en utilisant IlluminateFoundationHttpFormRequest ou IlluminateHttpRequest Fabriqué par : Demande ? Ou acceptent-ils uniquement les demandes de publication ?

Code :

php artisan make:request CalendarDayRequest

Exemple d'obtention d'itinéraires dans web.php

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

Contrôleur d'échantillon

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

ou contrôleur d'échantillon 2

use Illuminate\Http\Request;

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

J'obtiens l'erreur : Boucle de redirection infinie, trop de redirections.

P粉087951442P粉087951442179 Il y a quelques jours368

répondre à tous(1)je répondrai

  • P粉706038741

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

    Tout d'abord, vous ne pouvez pas valider les paramètres d'itinéraire dans les demandes de formulaire

    Vous pouvez cependant utiliser des expressions régulières pour valider vos itinéraires Exemple :

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

    Si vous souhaitez toujours utiliser la validate()demande de fonction ou de formulaire

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

    Méthode de demande de formulaire - remplacement de la all() méthode

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

    Si cela ne fonctionne pas, essayez le code suivant

    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);
     }
    
    }

    Comment vérifier les paramètres d'itinéraire dans Laravel 5 ?

    Mais si vous souhaitez utiliser la fonction validate(), je vous recommande de l'envoyer en paramètre de requête.

    répondre
    0
  • Annulerrépondre