【问题标题】:Laravel Route Model Binding ErrorLaravel 路由模型绑定错误
【发布时间】:2017-06-22 02:13:56
【问题描述】:

我正在使用 Laravel 开发一个应用程序,同时通过 Laravel 教程来学习这个框架的各个领域。

在 web.php 中,我有一个路由:

    Route::get('/events/{event}', 'EventController@show');

在事件控制器中,我有以下内容:

    public function show($id) {
        $event = Event::find($id);
        return $event;
    }

而且效果很好。当我尝试将其更改为以下格式以清理代码时:

    public function show(Event $event) {
        return $event;
    }

我收到错误消息:
App\Http\Controllers\EventController::show(App\Event $event) 的声明应该与 App\Http\Controllers\Controller::show($id) 兼容

我做错了什么?

【问题讨论】:

  • 您可能正在扩展具有show 方法并具有不同结构的基类。只是不要扩展它或创建另一个方法。
  • EventController 确实扩展了 Controller,但这是 Laravel 安装默认提供的。 laracast (laracasts.com/series/laravel-from-scratch-2017/episodes/9) 尽可能地展示了这一点,似乎没有做任何特别的事情。
  • 你解决了吗?否则,您是否在 App\Http\Controllers\Controller 中声明了 show 方法?
  • 代码“public function show(Event $event){ ... } 现在按预期工作。但是,我不记得当时我可能做错了什么,如果有的话.

标签: php laravel binding model routes


【解决方案1】:

您的参数不是来自 int 类型,而是来自 Event,它失败了。

【讨论】:

    【解决方案2】:

    为了能够做到这一点,您应该将此行添加到您的 RouteServiceProvider 类中

    Route::model('event', App\Event::class);

    它位于 app/providers 中。

    larvel docs

    【讨论】:

    • 根据阅读文档,我知道这应该如何工作(很快就会尝试)。但这是显式模型路由。鉴于我用于变量和模型名称的名称选择,它不应该隐式工作吗? laravel.com/docs/5.4/routing#implicit-binding
    • 尝试执行@Begmuhammet 建议的操作会导致此错误:尝试获取非对象的属性(查看:C:\Users\Phil\Google Drive\EFCICO\Amazon-AWS\apache2\laravel \resources\views\v1\public_pages\display_event.blade.php)
    猜你喜欢
    • 2018-04-05
    • 2020-12-20
    • 2021-05-24
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2015-07-12
    • 2020-05-05
    相关资源
    最近更新 更多