Laravel 5.6 getRouteKeyName()不起作用

时间:2018-05-08 12:35:42

标签: laravel laravel-5.6

这是我到目前为止的代码:

Web.php

// Show the requested page
public function show(Page $page)
{
    return view('templates.page', compact('page'));
}

的PageController

public function getRouteKeyName()
{
    return 'uri';
}

页面模型

.text()

我的问题是路由模型绑定是如何工作的,即使我更改了路由密钥名称,也没有在控制器中找到该页面。它在控制器中只有一个空模型,但没有找到该页面。

1 个答案:

答案 0 :(得分:5)

您应该执行以下操作:

// 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然后在getRouteKeyName模型中声明Page方法,并从该方法返回该列名称。例如,如果您的网页表格具有唯一slug而您的uri具有example.com/contact之类的内容,则声明以下方法:

public function getRouteKeyName()
{
    return 'slug'; // db column name
}

现在,框架将使用除where slug = {slug from uri} / default之外的id之类的内容来查询页面。希望现在有所帮助。