Laravel 5.6 getRouteKeyName() 不起作用

标签 laravel laravel-5.6

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

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/

相关文章:

php - laravel 记得我不工作

php - 您如何使用 laravel slack 通知 api 联系 (@) slack 中的某人?

php - Laravel - 如何更新整个集合

php - 图像存储链接在 Laravel 的在线服务器中不起作用

javascript - 在 VueJS 中从父组件中引用子组件的索引

mysql - 在 Laravel 中查找超过 15 天的日期

vue.js - 如何显示 Laravel Vue Js 错误

php - 选择 Paypal 服务

php - 如何在 Laravel 集成测试中等待页面重新加载

Laravel 5.6 - session 过期后不会持续存在