Partage
  • Partager sur Facebook
  • Partager sur Twitter

Laravel - Redirection des routes

route create qui redirige vers une route inconnu

23 mai 2018 à 11:05:27

Bonjour,

J'ai un problème avec ma route, au moment ou je clique sur mon lien celui-ci ne me redirige pas vers ma vue "create" mais vers ma vue show.. je n'ai jamais rencontré cette erreur et la j'avoue que je suis un peu perdu.

web.php

Route::resource('products','ProductController');

ProductController.php

/**
* Show the form for creating a new product.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
    $suppliers = Supplier::all();
    $categories = Category::all();
    return view('product.create', compact('suppliers', 'categories'));
}

Layout

<li>
    <a href="{{ URL::to('products/create') }}">
        Produits create
    </a>
</li>


Je suis bien en GET et je redirige bien vers products/create, cependant je ne suis pas redirigé vers mon formulaire de création et j'ai le même problème pour ma route show. Et si je n'ai pas de fonction show dans mon contrôleur, quand je clique sur le lien de création il me met un message d'erreur comme quoi j'ai pas de fonction show. J'ai l'impression qu'il prend mon create comme un paramètre ..

Avez-vous une solution ?

Merci à vous

-
Edité par Marvin.D 23 mai 2018 à 11:11:12

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 16:49:47

Bonjour,

Je pense en effet qu'il prend create pour un paramètre.

Essayes comme indiqué dans la doc:

{{ URL::to('products.create') }}


https://laravel.com/docs/5.6/controllers

-
Edité par eclairia 23 mai 2018 à 16:50:16

  • Partager sur Facebook
  • Partager sur Twitter
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
23 mai 2018 à 17:40:17

Pas de changement avec cette utilisation et en effet il prend create comme un paramètre car je remplace ce mot pas n'importe quoi et à chaque fois je fini dans ma fonction show ..
  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 17:55:56

Si c'est une route nommé ou une resource essaye avec ceci

{{ route('products.create') }}

Ne pas oublier également que les routes sont appelé dans leur ordre d'apparition dans le fichier routes/web.php

Si une route GET products/{product} apparait avant ta route GET products/create alors c'est c'est l'action qui correspond a products/{product} qui sera appellé avec create en parametre

-
Edité par Cobs 23 mai 2018 à 17:57:08

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 17:58:29

Au début ma route était nommée de cette façon mais elle ne fonctionne pas non plus, pour le reste je n'ai aucune ligne dans mon web.php au dessus de ceci

Route::resource('products','ProductController');

Quand je hover le bouton pour aller sur le formulaire d'ajout j'ai la bonne url qui s'affiche et quand je clique je fini dans la fonction show de mon contrôleur ProductController

-
Edité par Marvin.D 23 mai 2018 à 18:00:05

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 18:03:06

essaye de voir si tu n'as pas une route qui te parasite avec php artisan route:list un peutit route:clear ne peut pas faire de mal non plus

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 18:05:09

Au niveau des routes pas de problème à ce que je vois, je précise que j'ai le même problème pour toutes mes routes en ressource, products, suppliers et categories ..

php artisan route:clear
Ne donne rien non plus .. J'ai vraiment testé pas mal de chosee mais à chaque fois ECHEC

-
Edité par Marvin.D 23 mai 2018 à 18:08:24

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 18:13:24

si tu fais un dd() dans ton action create, il script s'interrompt ?
  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 18:16:10

Ce que j'ai fait pour tester j'ai mis un dd() sur chaque function/action du controleur, ex :

dd('show')

Dans la fonction show et create pour create mais je ne tombe jamais sur le dd du create mais j'ai le show qui s'affiche à chaque fois

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 18:34:34

moué, je sèche là, j'ai jamais eu ce genre de soucis, je me demande si il y a un middleware ou une fonction un peu planqué qui te fais une redirection.
  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 18:43:31

La même je sèche totalement sur ce coup et je peut pas avancé dans mon projet avec ce blocage :/

J'ai réussi à résoudre mon problème mais la solution n'est pas idéale ..

J'ai seulement mis

->where('id','[0-9]+')

Ainsi s'il trouve le mot create il ne le prend pas comme un paramètre ..

Route::get('products/{id}','ProductController@show')->name('products.show')->where('id', '[0-9]+');

-
Edité par Marvin.D 23 mai 2018 à 20:08:46

  • Partager sur Facebook
  • Partager sur Twitter
13 avril 2021 à 15:33:25

j'utilise laravel 8 mon enrégistrement ne marche pas depuis le formulaire de la vue

vue

<form action="{{route('create')}}" method="post">
{{csrf_field()}}

<input name="designation" type="text">
<input name="pu" type="number">
<input name="stocktheorique" type="number">
<input name="stockphysique" type="number">
<input name="image" type="image">
<button color="green">Valider</button>
</form>
WEB.php
Route::Post('ArticleSave','ControllerArticle@create')->name('ArticleSave');
Controller
public function create(Request $request){
$validator = Validator::make($request->all(), article::$rules);
if ($validator->fails()){
return response()->json($validator->errors(),400);
}
$article = article::create($request->all());
return response()->json($article,201);

}

  • Partager sur Facebook
  • Partager sur Twitter
14 avril 2021 à 7:45:11

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)