【问题标题】:Route model binding issue路由模型绑定问题
【发布时间】:2019-09-05 14:34:12
【问题描述】:

我有一组代码,它与我正在使用的其他代码类似,并且它们运行良好。就在这种情况下,有一些我无法找到原因的神秘问题。请看下面的代码

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 会打印在网页上。我什至尝试重新启动我的系统。没有出路。

我把Model Route Binding去掉了,照常尝试,

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 会正确打印数据。

在这种情况下,模型路由绑定可能会出现什么问题。我所有的控制器都使用模型路由绑定而不是通常的方式,但这是我第一次遇到这个问题。

【问题讨论】:

  • 在返回视图上方添加Log::info($category);,然后在storage/logs/ 中查看您的日志以查看打印的内容。
  • 请将您的路线发布到此控制器,我将使用更正的版本更新我的答案。

标签: php laravel laravel-5


【解决方案1】:

发件人: laravel.com/docs/5.8/routing#route-model-binding

隐式绑定

Laravel 自动解析定义在路由或控制器操作中的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配。

所以尝试这样做:

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

显式绑定

要注册显式绑定,请使用路由器的模型方法为给定参数指定类。您应该在 RouteServiceProvider 类的 boot 方法中定义显式模型绑定

或者使用显式绑定

RouteServiceProvider.php

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

    Route::model('cat', App\Category::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');
    

    【讨论】:

    • 谢谢。那是一个新信息。它奏效了。
    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 2019-01-10
    • 2016-06-04
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多