J'essaie de transmettre un paramètre id
de ma vue à l'itinéraire. J'ai ma vue blog.blade.php
, j'ai fait ce qui suit:
+--------+----------+---------------------------------+------------------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+---------------------------------+------------------+------------------------------------------------------------------------+--------------+ | | GET|HEAD | / | home | Closure | web | | | GET|HEAD | about-us | about | Closure | web | | | GET|HEAD | aces-admin | admin.home | Closure | web | | | GET|HEAD | aces-admin/all-posts | admin.allposts | Closure | web | | | GET|HEAD | aces-admin/all-users | admin.allusers | Closure | web | | | GET|HEAD | aces-admin/edit-events | admin.events | Closure | web | | | GET|HEAD | aces-admin/edit-messages | admin.messages | Closure | web | | | GET|HEAD | aces-admin/edit-study-materials | admin.study | Closure | web | | | GET|HEAD | aces-admin/manage-photos | admin.photos | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | blog | blog | App\Http\Controllers\PostController@getIndex | web | | | GET|HEAD | blog/create | create | Closure | web | | | GET|HEAD | blog/post/{id} | post | App\Http\Controllers\PostController@getPost | web | | | GET|HEAD | events | event | Closure | web | | | GET|HEAD | gallery | gallery | Closure | web | | | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest | | | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest | | | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web | | | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest | | | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest | | | POST | password/reset | password.update | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest | | | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest | | | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest | | | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest | +--------+----------+---------------------------------+------------------+------------------------------------------------------------------------+--------------+
Mon itinéraire ressemble à:
http://localhost/blog/post?id=2
Et mon action de contrôleur ressemble à:
Route::get('blog/post/', [ 'uses' => 'PostController@getPost', 'as' => 'post' ]);
Mais chaque fois que je charge la page, j'obtiens l'erreur suivante
Paramètres obligatoires manquants pour [Route: post] [URI: blog / post / {id}]. (Vue: D: \ Développement Web \ ACES \ resources \ views \ section \ blog.blade.php)
J'ai vérifié si la valeur de $ post-> id
existe en l'affichant sur la vue et elle existe
Plus
J'ai essayé de supprimer la partie {id}
de l'itinéraire et je l'ai fait comme
public function getPost( $id) { $post = Post::where('id','=',$id)->with('likes')->with('user')->first(); return view('section.blog', ['post' => $post]); }
La page se charge mais le lien ressemble à:
Route::get('blog/post/{id}', [ 'uses' => 'PostController@getPost', 'as' => 'post' ]);
Ensuite, j'obtiens une erreur dans le contrôleur
Pourquoi cela se produit-il? Pourquoi le paramètre n'est-il pas transmis à l'itinéraire?
J'utilise Laravel 5.7
php artisan route: list
ressemble à ceci
<a href="{{ route('post', ['id' => $post->id ] ) }}" class="btn btn-primary">Read More </a>
p >
3 Réponses :
Essayez votre deuxième méthode et mettez à jour votre contrôleur comme ci-dessous.
public function getPost(Request $request) { $id = $request->get('id'); $post = Post::where('id','=',$id)->with('likes')->with('user')->first(); return view('section.blog', ['post' => $post]); }
Cela n'a pas aidé
Pouvez-vous poster le résultat "php artisan route: list" ici?
C'est vraiment bizarre, mon pote. Votre code me semble correct.
Le problème semble être lié au passage du paramètre id
de la vue à la route. Comment la modification de l'action du contrôleur aide-t-elle ici?
Dans votre deuxième méthode, vous ne passez pas de paramètre. Vous passez une demande. car votre itinéraire n'a aucun paramètre localhost / blog / post? id = 2 . Ainsi, vous pouvez accéder à l'identifiant sur demande et c'est pourquoi j'ai mis à jour votre code de contrôleur. Essayez-le.
Pouvez-vous partager, quel était votre problème? Et comment l'avez-vous résolu?
C'était une erreur stupide. J'avais deux références à l'itinéraire post
à mon avis. J'ignorais la première référence qui a été appelée sans passer le paramètre. Cela causait le problème.
Pour afficher votre message, vous n'avez pas besoin d'utiliser un itinéraire dans votre balise d'ancrage. Essayez ceci:
<a href="/blog/post{{ $post->id }}" class="btn btn-primary">Read More </a>
Laravel récupérera automatiquement l'ID si vous avez correctement configuré votre contrôleur.
définissez votre itinéraire sous cette forme:
Route::get('blog/post/{id}', 'PostController@getPost')->name('post');
est-ce que la route de poste fait partie d'un groupe de routes? si oui, pouvez-vous ajouter un groupe de routes parent?
Hei, si vous inspectez l'élément a, à quoi ressemble le lien?
@Teoman La route de publication n'appartient à aucun groupe de routes.
@ Răducanu Je l'ai déjà dit dans la question. Avec une route comme
Route :: get ('blog / post / {id}', ....
j'obtiens l'erreur et la page d'erreur laravel s'affiche. (Je ne trouve donc pas comment le lien mais si je supprime{id}
de la route et le rend commeRoute :: get ('blog / post /', ....
, le lien ressemble commehttp: // localhost / blog / post? id = 2
@Xitish si vous souhaitez toujours déboguer cela, vous pouvez le définir en paramètre optionnel avec? ({id?}) et voir l'url générée.