这是我到目前为止的代码:
Web.php
Route::get('/{uri}', 'PageController@show')->name('page.show');
页面 Controller
// Show the requested page
public function show(Page $page)
{
return view('templates.page', compact('page'));
}
页面模型
public function getRouteKeyName()
{
return 'uri';
}
我的问题是,即使我更改了路由键名称,路由模型绑定(bind)为什么不起作用并且在 Controller 中找不到页面。它在 Controller 中只有一个空模型,并且没有找到该页面。
最佳答案
您应该执行如下操作:
// Route
Route::get('/{page}', 'PageController@show')->name('page.show');
// Controller Method
public function show(Page $page)
{
return view('templates.page', compact('page'));
}
如果/{page}
包含id
,例如:1
并且您的页面表有id
列,那么一切都已完成,但如果您想查询 id 以外的页面表,请在您的 Page
模型中声明 getRouteKeyName
方法,并从该方法中重新调整该列名称。例如,如果您的页面表具有唯一的 slug
并且您的 uri
具有类似于 example.com/contact
的内容,则声明以下方法:
public function getRouteKeyName()
{
return 'slug'; // db column name
}
现在,框架将使用类似于 where slug = {slug from uri}
的内容(而不是 id
/default)来查询页面。希望现在有帮助。
关于Laravel 5.6 getRouteKeyName() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233800/