【发布时间】: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->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。