我想在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/
答案 0 :(得分:1)
在Yii中使用依赖注入并不容易,因为尚未创建框架以使用它。
有一个扩展程序允许您使用依赖注入:http://www.yiiframework.com/extension/yiipimple
我没有尝试过,所以我无法告诉你这个扩展是否能满足你的需求。
答案 1 :(得分:1)
这与Zend Framework 1的问题相同:框架使用构造函数,因此您无法将其用于依赖注入。
我在ZF1中集成PHP-DI所做的工作是覆盖" Dispatcher"框架,即负责创建控制器的对象。
通过覆盖它,我可以控制控制器的创建方式,从而注入依赖关系。