Проблема с привязкой модели маршрута

#php #laravel #laravel-5

#php #laravel #laravel-5

Вопрос:

У меня есть набор кода, он похож на другие коды, которые я использую, и они работают нормально. Просто в этом случае есть какая-то загадочная проблема, причину которой я не могу найти. Пожалуйста, посмотрите код ниже

BlogPostController.php

     public function category(Category $category){
        return view('blog/cat')->with('categories',$category);
    }
 

categories.blade.php

     @extends('layouts.blog')

    {‌{$categories->name}}
 

Он category.blade не выводится {‌{$categories->name}} . Ошибки не отображаются. Если я изменю {‌{$categories->name}} и введу обычный текст, например data , тогда data он будет напечатан на веб-странице. Я даже пытался перезапустить свою систему. Здесь нет никакого выхода.

Я удалил привязку маршрута модели и попробовал обычный способ ,

 public function category($id){
    $category = Category::where('id',$id)->first();
    return view('blog/cat')->with('categories',$category);
}
 

РЕДАКТИРОВАТЬ
МАРШРУТ — web.php

 Route::get('blog/category/{cat}','BlogPostController@category')->name('blog.category');
 

В этом случае программа category.blade.php печатает данные правильно.

В чем может быть проблема с привязкой модельного маршрута в этом случае? Все мои контроллеры используют привязку маршрута модели, а не обычным способом, но я впервые сталкиваюсь с этой проблемой.

Комментарии:

1. Добавьте Log::info($category); выше представление возврата, затем проверьте свои журналы, storage/logs/ чтобы увидеть, что он распечатал.

2. Пожалуйста, отправьте свой маршрут на этот контроллер, и я обновлю свой ответ исправленной версией.

Ответ №1:

From: laravel.com/docs/5.8/routing#route-model-binding

Неявная привязка

Laravel автоматически разрешает красноречивые модели, определенные в маршрутах или действиях контроллера, имена переменных с указанием типа которых соответствуют имени сегмента маршрута.

Поэтому попробуйте сделать:

 Route::get('blog/category/{category}','BlogPostController@category')->name('blog.category');
 

Явная привязка

Чтобы зарегистрировать явную привязку, используйте метод model маршрутизатора, чтобы указать класс для заданного параметра. Вы должны определить свои явные привязки модели в методе загрузки класса RouteServiceProvider

Или используйте явную привязку

RouteServiceProvider.php

 public function boot()
{
    parent::boot();

    Route::model('cat', AppCategory::class);
}
 

И вы все еще можете использовать:

 Route::get('blog/category/{cat}','BlogPostController@category')->name('blog.category');
 

Ответ №2:

https://laravel.com/docs/5.5/routing#implicit-binding

 Route::get('blog/category/{category}','BlogPostController@category')->name('blog.category');
 

Комментарии:

1. Спасибо. Это была новая информация. И это сработало.