1
votes

Passage des paramètres à Route: paramètres requis manquants pour l'erreur [Route: post]

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

Update

php artisan route: list ressemble à ceci

<a href="{{ route('post', ['id' => $post->id ] ) }}" class="btn btn-primary">Read More </a>    

p >


5 commentaires

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 comme Route :: get ('blog / post /', .... , le lien ressemble comme http: // 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.


3 Réponses :


1
votes

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]);
}


7 commentaires

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.



1
votes

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.


0 commentaires

0
votes

définissez votre itinéraire sous cette forme:

Route::get('blog/post/{id}', 'PostController@getPost')->name('post');


0 commentaires