-1
votes

Laravel Validate () Catch Actions L'erreur et une réponse étrange est renvoyée avec la méthode postale. Tests avec facteur

J'utilise Postman pour tester l'ajout d'un enregistrement à la base de données. Fonctionne fonctionne lorsque toutes les données sont envoyées correctement (à l'aide de la méthode postale). Lorsque j'essaie d'envoyer des données non valides dans l'un des champs Postman me dit que

symfony \ composant \ httpkernel \ exception \ MethodnoTowedHttpException: la méthode postale n'est pas prise en charge pour cet itinéraire. Méthodes prises en charge: Obtenez, TÊTE P> BlockQuote>

Qui est étrange car post fonctionne définitivement lorsque les données sont correctes et l'enregistrement est ajouté. Je cherche à obtenir un message d'erreur approprié et peut-être le personnaliser. P>

Après avoir lu des réponses à des problèmes similaires, j'ai ajouté obtenir la méthode de la même route que les utilisations de messagerie d'erreurs obtiennent-elles si je comprends? Mais l'erreur persiste même avec une méthode d'obtention de la méthode. P>

Ce sont mes itinéraires p> xxx pré>

PHP Artisan itinéraire: liste code> montre que J'ai à la fois d'obtenir et de poster des itinéraires pour "voyage", une erreur reste p>

Ceci est ma fonction dans LARAVEL P>

public function addTrip(Request $request) {
    $validated = $request->validate([
        'date' => ['required','regex:/^(2020-08-([0-2][0-9]|30))$/'],
        'user_id'=> ['required','regex:/^[0-9]*$/'],
        'train_id'=> ['required','regex:/^(1|2)$/'],
        'train_route_id'=> ['required', 'regex:/^(1|2)$/'],
        'stop_from'=> ['required','regex:/^[1-8]$/'],
        'stop_to'=> ['required','regex:/^[1-8]$/'],
    ]);
        
    $data = request()->post();

    DB::table('trips')->insert([
        [
            'user_id' => $data['user_id'],
            'train_id' => $data['train_id'],
            'train_route_id' => $data['train_route_id'],
            'stop_from' => $data['stop_from'],
            'stop_to' => $data['stop_to'],
            'date' => $data['date'],
            'created_at' => Carbon::now(),
            'updated_at' => Carbon::now()
        ],
    ]);
        
}


6 commentaires

Il se peut que l'URL correspond à un autre itinéraire, vérifiez donc d'autres voies pour voir si ces données pouvaient correspondre. Pas une personne de larançonne, alors ne sais pas si vous pouvez montrer la route qu'elle déclenche à la place.


juste essayer la méthode tout au lieu de poster et d'obtenir


Je ne pense pas que votre code soit exécuté après la méthode de validation si vous passez dans des données non valides, car la méthode de validation de Laravel est celle-ci, elle redirigera à la page précédente si la validation échoue. Veuillez vous référer à cette Lien pour voir comment prévenir ce comportement .


laravel.com/docs/7.x/validation mentionne que la validation a échoué peut causer automatique Redirection. Donc, vous êtes probablement redirigé vers une URL différente ici, avec un code de statut qui rend le client à conserver la même méthode de demande (probablement 307 redirection temporaire), mais que itinéraire de cette deuxième URL n'est pas réellement existe pour la poste.


@ Gonika je ne pense pas que ce soit une bonne idée


Essayez d'utiliser CURL (ou une autre alternative) Juste pour éliminer la possibilité qu'il s'agisse d'un artefact Postman


3 Réponses :


-1
votes

Vérifiez si vous avez enregistré un autre itinéraire au-dessus de cet itinéraire.

Vous pouvez aussi vouloir essayer Cache PHP Artisan: Effacer ou PHP Artisan Itinéraire: Cache .


3 commentaires

S'il vous plaît, ne répondez pas à une question avec une autre question.


Désolé mon mauvais pour répondre à une question avec une question.


Cela ne fournit pas de réponse à la question. Une fois que vous avez suffisamment réputation , vous pourrez Commentaire sur n'importe quel message ; au lieu de, Fournir des réponses Cela n'exige pas de clarification de l'Asker . - de l'avis



1
votes

Bien que Validate fonctionne également bien, mais comme mentionné par @Cbraroe, la validation peut provoquer des redirections automatiques. Vous pouvez essayer l'autre méthode.

public function addTrip(Request $request) {
        $validator = Validator::make($request->all(), [
            'date' => ['required','regex:/^(2020-08-([0-2][0-9]|30))$/'],
            'user_id'=> ['required','regex:/^[0-9]*$/'],
            'train_id'=> ['required','regex:/^(1|2)$/'],
            'train_route_id'=> ['required', 'regex:/^(1|2)$/'],
            'stop_from'=> ['required','regex:/^[1-8]$/'],
            'stop_to'=> ['required','regex:/^[1-8]$/'],
        ]);
        if ($validator->fails()) {
            return Redirect::back()->withErrors($validator);
        }
        
        $data = request()->post();

        DB::table('trips')->insert([
            ['user_id' => $data['user_id'], 'train_id' => $data['train_id'], 'train_route_id' => $data['train_route_id'], 'stop_from' => $data['stop_from'], 'stop_to' => $data['stop_to'], 'date' => $data['date'], 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()],
        ]);
        


1 commentaires

Merci! Faire fonctionner le validateur personnalisé semble fonctionner lorsque le validateur échoue, je peux rediriger!



0
votes

Redirectes Laravel lorsque la validation échoue. Donc, vous redirigez vers un itinéraire qui est peut-être un itinéraire. Comme vous essayez de posterman, vous pouvez envoyer une paire de valeur clé dans votre en-tête de demande.

{
    "message": "The given data was invalid.",
    "errors": {
        "date": [
            "The date does not match the format"
        ]
    }
}


0 commentaires