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');
3 Réponses :
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
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.
Le problème réside dans votre classe App \ Http \ Requests \ StoreFeedback .
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.
Mais, si vous voulez obtenir les erreurs, vous pouvez simplement passer le HEADER Accept: application / json pour demander HEADER et vous obtiendrez les erreurs.
J'étais sur le point de publier ça! à partir de la documentation Si la validation échoue, une réponse de redirection sera générée pour renvoyer l'utilisateur à son emplacement précédent. laravel.com/docs/5.7/validation
Depuis l'année dernière, j'explore les codes laravels. Cela me déploie les yeux. :RÉ
Merci pour votre réponse. J'ai raté une partie importante de la validation
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.
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/ apidéfinie ici?@BizzyBob J'ai mis à jour la question, veuillez jeter un œil