Laravel: поймать все несуществующие страницы - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу сделать страницу 404 для всех несуществующих страниц. Например, у меня есть этот код

public function category($category)
    {
        $category = Category::find($category);
        if($category === null) return abort(404); // return 404 page with 404 header status error
        return view('pages.category', compact('category'));
    }

Файл моих маршрутов

Route::get('/category/{category}', 'CategoryController@category');

У меня есть другие компоненты, такие как подкатегории, статьи, обзоры и т. Д. В первом случае я могу набрать app / category / 1234 .
Если мое приложение не имеет категории, где id = 1234 в таблице категорий, то без проверки variable === null я могу получить страницу по умолчанию, но пустую, и она будет иметь статус http http 200. Это не нормально

Я могу проверить ноль во всех компонентах, но я думаю, что это не правильно.

И еще один вопрос об ошибке SQL. Поле "id" имеет целочисленный тип, и если я зайду в браузер app / category / 1sdsds , я получу

SQLSTATE [22P02]: недопустимое текстовое представление: 7 ОШИБКА: неверный синтаксис ввода для целого числа

Как я могу это исправить?

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2018

Позволяет Laravel знать, что вы принимаете только целое число

Route::get('/category/{category}', 'CategoryController@category')->where('category', '[0-9]+');

Для контроллера

public function category(Category $category){...}

Если не найти, следует вернуть страницу 404 Вам не нужны другие проверки и вам не нужно присваивать категорию $, она будет уже назначена.

Другой путь будет

public function category($category){
    $category = Category::firstOrFail($category);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...