首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 5目标不可实例化

Laravel 5目标不可实例化
EN

Stack Overflow用户
提问于 2015-04-02 09:22:17
回答 1查看 12.6K关注 0票数 3

关于这个话题,我已经问了很多问题,但是我仍然有这个问题,我不知道问题是什么。

我想实现这一点,我可以实例化一个接口,而不是一个实现。

我使用的是Laravel 5,这是代码/结构:

在应用程序中,我创建了一个Contracts文件夹。在这个文件夹中有Messenger.php:

Messenger.php

代码语言:javascript
运行
复制
<?php namespace App\Contracts;

interface Messenger {

    public function goodmorning($name);

}

在应用程序/服务中,我有DailyMessenger.php

代码语言:javascript
运行
复制
<?php namespace App\Services;

use App\Contracts\Messenger;

class DailyMessenger implements Messenger {

    public function goodmorning($name)
    {
        return 'Goodmorning '. $name;
    }

}

现在,我想在控制器中实例化这个接口。

代码语言:javascript
运行
复制
public function __construct(Messenger $messenger)
    {
        $this->messenger = $messenger;
    }

现在,如果我遵循Laravel网站上的文档,我只需要在服务容器中注册它,就可以在现有的AppServiceProvider.php中注册。

代码语言:javascript
运行
复制
public function register()
    {
        $this->app->bind(
            'Illuminate\Contracts\Auth\Registrar',
            'App\Services\Registrar'
        );

        $this->app->bind('App\Contacts\Messenger', 'App\Services\DailyMessenger');
    }

如果我访问映射到控制器的适当路由,就会得到错误:

代码语言:javascript
运行
复制
BindingResolutionException in Container.php line 785:
Target [App\Contracts\Messenger] is not instantiable.

我想我已经准确地跟踪了Laravel的文档,但是我遗漏了什么呢?预先多谢:-)

EN

回答 1

Stack Overflow用户

发布于 2015-04-02 17:36:23

看起来您在绑定时拼错了名称空间,使用App\Contact而不是App\Contracts。应:

代码语言:javascript
运行
复制
$this->app->bind('App\Contracts\Messenger', 'App\Services\DailyMessenger');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29409353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档