Laravel 5.6 getRouteKeyName()不起作用

Dan*_*est 5 laravel laravel-5.6

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

Web.php

Route::get('/{uri}', 'PageController@show')->name('page.show');
Run Code Online (Sandbox Code Playgroud)

页面控制器

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

页面模型

public function getRouteKeyName()
{
    return 'uri';
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,即使我更改了路由键名,Route-model-binding怎么也无法正常工作并且在控制器中找不到页面。它在控制器中只有一个空模型,没有找到页面。

The*_*pha 7

您应该执行以下操作:

// Route
Route::get('/{page}', 'PageController@show')->name('page.show');

// Controller Method
public function show(Page $page)
{
    return view('templates.page', compact('page'));
}
Run Code Online (Sandbox Code Playgroud)

如果/{page}包含idlike:1并且您的pages表具有一id列,则说明已完成所有操作,但是,如果您要查询页面表(而不是id)getRouteKeyName,请在Page模型中声明该方法,然后从该方法中检索该列名。因此,例如,如果您的pages表具有唯一性,slug并且您uri具有类似的内容,example.com/contact则声明以下方法:

public function getRouteKeyName()
{
    return 'slug'; // db column name
}
Run Code Online (Sandbox Code Playgroud)

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