【问题标题】:Passing parameters to Route : Missing required parameters for [Route: post] error将参数传递给 Route :缺少 [Route: post] 错误所需的参数
【发布时间】:2019-05-28 13:15:42
【问题描述】:

我正在尝试将参数id 从我的视图传递到路线。我的观点blog.blade.php,我做了以下事情:

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

我的路线如下:

Route::get('blog/post/{id}', [
  'uses' =>  'PostController@getPost',
  'as' => 'post'
]);

我的控制器动作看起来像:

public function getPost( $id)
{
    $post = Post::where('id','=',$id)->with('likes')->with('user')->first();
    return view('section.blog', ['post' => $post]);
}

但是每当我加载页面时,我都会收到以下错误

缺少 [Route: post] [URI: blog/post/{id}] 的必需参数。 (查看:D:\Web Development\ACES\resources\views\section\blog.blade.php)

我通过在视图上显示$post-&gt;id 的值来检查它是否存在并且它存在

更多
我尝试从路线中删除 {id} 部分并使其像

Route::get('blog/post/', [
  'uses' =>  'PostController@getPost',
  'as' => 'post'
]);

页面加载,但链接看起来像:

http://localhost/blog/post?id=2

然后我在控制器中得到错误

为什么会这样?为什么参数没有被传递给路由?
我正在使用 Laravel 5.7

更新

php artisan route:list 看起来像这样

    +--------+----------+---------------------------------+------------------+------------------------------------------------------------------------+--------------+
| 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    |
+--------+----------+---------------------------------+------------------+------------------------------------------------------------------------+--------------+

【问题讨论】:

  • 是路由组下的发布路由吗?如果是你可以添加父路由组吗?
  • 嘿,如果您检查 a 元素,链接看起来如何?
  • @Teoman 发布的路由不在任何路由组下。
  • @Răducanu 我已经在问题中说明了这一点。使用Route::get('blog/post/{id}', .... 之类的路线,我收到错误并显示 laravel 错误页面。 (所以我找不到链接的样子)。但是,如果我删除 {id} 前路由并使其像 Route::get('blog/post/', .... ,则链接看起来像 http://localhost/blog/post?id=2
  • @Xitish 如果您仍然希望调试它,您可以将其设置为可选参数? ( {id?} ) 并查看生成的 url。

标签: php laravel routes


【解决方案1】:

尝试您的第二种方法并更新您的控制器,如下所示。

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

【讨论】:

  • 这没有帮助
  • 你能在这里发布“php artisan route:list”结果吗?
  • 这真的很奇怪,伙计。你的代码在我看来没问题。
  • 在您的第二种方法中,您不传递参数。你传递一个请求。因为您的路线没有任何参数localhost/blog/post?id=2。因此,您可以通过请求访问 id,这就是我更新您的控制器代码的原因。试试看吧。
  • 这是一个愚蠢的错误。在我看来,我有两个对post 路线的引用。我不知道在没有传递参数的情况下调用的第一个引用。这就是问题的根源。
【解决方案2】:

要查看您的帖子,您无需在锚标记中使用路由。试试这个:

<a href="/blog/post{{ $post->id }}" class="btn btn-primary">Read More </a> 

如果您正确设置了控制器,Laravel 将自动获取 ID。

【讨论】:

    【解决方案3】:

    以这种形式定义您的路线:

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

    【讨论】:

      猜你喜欢
      • 2020-05-02
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2023-03-23
      • 2021-11-03
      • 2021-08-17
      相关资源
      最近更新 更多