5
votes

La requête Laravel 5.8 POST lance toujours une page de bienvenue

J'essaie de tester mon API en utilisant Postman, mais lorsque j'applique à la requête POST , cela me renvoie toujours à la page d'accueil. J'ai déjà mis le jeton XSRF à l'intérieur mais je ne fonctionne toujours pas.

Voici mes routes api.php :

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::resource('product-categories', 'ProductCategoryController')->parameters([
    'product_category' => 'productCategory'
]);

Route::resource('product-sub-categories', 'ProductSubCategoryController')->parameters([
    'product_sub_category' => 'productCategory'
]);

Voici ma méthode de magasin de FeedbackController:

/**
 * Store a newly created resource in storage.
 *
 * @param  \App\Http\Requests\StoreFeedback  $request
 * @return \Illuminate\Http\Response
 */
public function store(Product $product, StoreFeedback $request)
{
   $product->addFeedback(
      $request->validated()
   );

   return response()->json([
      "status" => "success",
      "message" => "Your feedback has been submitted."
   ], 200);
}

Voici mon fichier web.php :

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Route::resource('products/{product}/feedbacks', 'FeedbackController');


6 commentaires

Appelez-vous s'il vous plaît montrez-moi votre fonction index () ? Qu'est-ce qu'elle retourne?


pouvez-vous essayer d'inverser les arguments dans la fonction store () , c'est-à-dire: store (StoreFeedback $ request, Product $ product)


ici, je l'ai téléchargé pour que vous puissiez voir tout mon code: lien vers la capture d'écran du code . Comme vous pouvez le voir, cela ne touche même pas la méthode d'indexation.


@dparoli Déjà essayé, toujours le même


à quoi ressemble votre fichier web.php ? Y a-t-il une chance que vous ayez une route / api définie ici?


@BizzyBob J'ai mis à jour la question, veuillez jeter un œil


3 Réponses :


1
votes

Je pense qu'il affiche la même page parce que vous utilisez la Route :: resource , comme indiqué dans ce Question ,

Un contrôleur de ressources RESTful configure des routes par défaut pour vous et les nomme même.

public function store(Request $request)
{
   dd($request->body); // or the key you send it on the postman
}

Vous donne ces routes nommées:

Route::post('products/{product}/feedbacks', 'FeedbackController@store');

Je suppose que vous appelez essentiellement la fonction index () dans votre FeedbackController encore et encore p >

Changez votre itinéraire en:

Verb          Path                        Action  Route Name
GET           /users                      index   users.index
GET           /users/create               create  users.create
POST          /users                      store   users.store
GET           /users/{user}               show    users.show
GET           /users/{user}/edit          edit    users.edit
PUT|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy

MODIFIER changez la fonction de votre contrôleur en:

Route::resource('users', 'UsersController');

Et montrez-nous ce que vous avez


10 commentaires

U'uh .. ça me jette à la méthode d'index au lieu de store: /


J'ai oublié de pointer la fonction, c'est: 'FeedbackController @ store'. J'ai mis à jour ma réponse. Réessayer


Je sais, j'ai ajouté une return $ request; aussi sur le contrôleur, et encore, rien ne se passe .. Mais quand je le change en GET, il a été déclenché: / lien vers la capture d'écran


C'est vraiment étrange, mettez un dd ($ request) et voyez ce que vous avez


Cela fonctionne quand je fais comme ceci: Route :: post ('products / {product} / feedbacks', function () {dd ("Ça marche");});


Vous recevez les paramètres que vous envoyez?


oui, j'ai les paramètres. mais seulement si je le code en dur dans une fonction comme celle-ci: lien vers la capture d'écran


avez-vous essayé une autre route (une route teste par exemple)? Cela semble être un problème de connexion, la route n'atteint jamais la fonction. Essayez peut-être de ne recevoir qu'un seul paramètre et de les imprimer, juste pour vous assurer que l'itinéraire va au bon endroit. Je mettrai à jour ma réponse.


Oui, j'ai fait une requête GET pour cela, il atteint le contrôleur et la méthode d'index. Il montre également les données du produit transmises par le caractère générique. C'est étrange :/


Il n'y a rien de mal avec son code. Le problème ici est que la validation du formulaire a échoué et qu'il est renvoyé à la page précédente. Comme il essaie depuis le facteur, il n'y a pas de page précédente, il est renvoyé à la page d'accueil ou / par défaut. Ne suggérez pas de mauvaises choses. S'il réussit la classe Request , cela fonctionnera. mais ce n'est pas le cas.



12
votes

La requête POST lance toujours la page d'accueil

Le problème réside dans votre classe App \ Http \ Requests \ StoreFeedback .

Comment?

Parce que vous passez la demande via le validateur de formulaire. Ce qui invalide la demande de formulaire. Et c'est pourquoi renvoyer la requête à l'URL précédente qui devient le / par défaut.

Hiérarchie ci-dessous

Mais, si vous voulez obtenir les erreurs, vous pouvez simplement passer le HEADER Accept: application / json pour demander HEADER et vous obtiendrez les erreurs.

Raison: ValidationException gérée ici < / a>



1
votes

Je viens de trouver le problème, il venait de app \ Http \ Requests \ StoreFeedback comme l'a dit M.ssi-anik . Je ne sais pas pourquoi pour la validation booléenne, quand je mets true ou false , cela échoue et me redirige vers la page d'accueil.

À la place, j'ai utilisé 0 ou 1 , il accepte les paramètres et fonctionne normalement.


0 commentaires