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

时间:2014-03-27 13:53:23

标签: php yii interface dependency-injection

我想在Yii 1.1.14项目中使用Interfaces和Dependency Injection。这是我的演示代码:

界面:

interface IUserInterface
{   
    public function DoSomething();
}

班级:

class UserService implements IUserInterface
{
    public function DoSomething()
    {
        echo "TEST TEST";
    }
}

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

我试过这个:

class AccountController extends Controller
{       
    protected $userService;

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

        parent::__construct();
    }    

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

但由于CController构造函数,这不会起作用:

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/

2 个答案:

答案 0 :(得分:1)

在Yii中使用依赖注入并不容易,因为尚未创建框架以使用它。

有一个扩展程序允许您使用依赖注入:http://www.yiiframework.com/extension/yiipimple

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

答案 1 :(得分:1)

这与Zend Framework 1的问题相同:框架使用构造函数,因此您无法将其用于依赖注入。

我在ZF1中集成PHP-DI所做的工作是覆盖" Dispatcher"框架,即负责创建控制器的对象。

通过覆盖它,我可以控制控制器的创建方式,从而注入依赖关系。

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