首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Yii控制器中使用接口和DI

在Yii控制器中使用接口和DI
EN

Stack Overflow用户
提问于 2014-03-27 21:53:23
回答 2查看 2.2K关注 0票数 0

我想在我的Yii 1.1.14项目中使用接口和依赖注入。下面是我的演示代码:

接口:

代码语言:javascript
运行
复制
interface IUserInterface
{   
    public function DoSomething();
}

类:

代码语言:javascript
运行
复制
class UserService implements IUserInterface
{
    public function DoSomething()
    {
        echo "TEST TEST";
    }
}

现在来看对我来说有问题的部分。如何在我的控制器中注入接口?

我已经尝试过了:

代码语言:javascript
运行
复制
class AccountController extends Controller
{       
    protected $userService;

    public function __construct(IUserInterface $userInterface) 
    {
        $this->userService = $userInterface;

        parent::__construct();
    }    

    public function actionTest()
    {
        $this->userService->DoSomething();
    }
}

但这不会起作用,因为使用了CController构造函数:

代码语言:javascript
运行
复制
public void __construct(string $id, CWebModule $module=NULL)

我应该怎么做,才能使用我的控制器中的接口?

我在Yii论坛上问了同样的问题,但我们最终还是走了个大圈子:http://www.yiiframework.com/forum/index.php/topic/52810-using-interfaces-and-di-in-yii-controllers/

EN

回答 2

Stack Overflow用户

发布于 2014-03-27 22:09:09

在Yii中使用依赖注入并不容易,因为框架并不是为了使用它而创建的。

有一个扩展可以让您使用依赖注入:http://www.yiiframework.com/extension/yiipimple

我还没有试过,所以我不能告诉你这个扩展是否能满足你的需求。

票数 1
EN

Stack Overflow用户

发布于 2014-03-28 17:21:40

Zend Framework1也存在同样的问题:框架使用构造器,所以您不能将其用于依赖项注入。

为了在ZF1中集成PHP-DI,我覆盖了框架的"Dispatcher“,也就是负责创建控制器的对象。

通过覆盖它,我可以控制控制器是如何创建的,从而注入依赖项。

看看这里:https://github.com/mnapoli/PHP-DI-ZF1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22689731

复制
相关文章

相似问题

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