Страница 404, если страница не найдена в Laravel - PullRequest
0 голосов
/ 14 марта 2020

У меня есть проект на Laravel 5.8. Это inte rnet -маркет с категориями, брендами и продуктами. Я использовал в своих контроллерах переменную из модели: route:

Route::prefix('categories')->get('/{category}', 'ProductsController@openCategory')->name('openCategory');

модель:

class Category extends Model
{
    public function products()
    {
        return $this->hasMany(Product::class);
    }

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

метод контроллера:

public function openCategory(Category $category = null)
{
    $allInfo = $this->getAllInfo();
    $categories = $this->getCategories();
    $brands = $this->getBrands();

    return view("pages.category", compact('allInfo','category', 'categories', 'brands'));
}

Я не использую отношение по ID, я использую отношение по 'category_alias'. Но если я напишу название категории с ошибкой, я получу сообщение - OPPS! Мы не смогли найти эту страницу Э-э ... Похоже, вы что-то испортили. Страница, которую вы ищете, исчезла и исчезла. Почему? Но если я использую отношение по идентификатору, я получаю страницу 404 - для меня это успех.

1 Ответ

1 голос
/ 14 марта 2020

Определяя маршрут с помощью -> get ('/ {category}' и печатая на контроллере, Category $ category, вы сообщаете Laravel, что хотите, чтобы он разрешил эту категорию для вас.

Это обрабатывается сервисным контейнером, как описано в https://laravel.com/docs/master/container#introduction

Если вы предоставите значение, которое не разрешается в id для категории в базе данных, сервисный контейнер будет быть неспособным что-либо загрузить. Laravel отвечает на этот сценарий ios, возвращая 404.

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