Laravel 5.6 getRouteKeyName () не работает - PullRequest
0 голосов
/ 08 мая 2018

Это код, который у меня есть:

Web.php

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

PageController

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

Страница модели

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

У меня вопрос: почему не работает привязка модели маршрута и не удается найти страницу в контроллере, хотя я изменил имя ключа маршрута. Он просто имеет пустую модель в контроллере и не нашел страницу.

1 Ответ

0 голосов
/ 08 мая 2018

Вы должны сделать что-то вроде следующего:

// 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, то все готово, но если вы хотите запросить таблицу страниц, отличную от идентификатора, объявите метод getRouteKeyName в вашей Page модели и верните имя этого столбца из этого метода. Так, например, если ваша таблица страниц имеет уникальный slug, а ваш uri имеет что-то вроде example.com/contact, тогда объявите следующий метод:

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

Теперь платформа будет запрашивать страницу, используя что-то вроде where slug = {slug from uri}, отличное от id / default. Надеюсь, это поможет сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...