我想在我的Yii 1.1.14项目中使用接口和依赖注入。下面是我的演示代码:
接口:
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/
发布于 2014-03-27 22:09:09
在Yii中使用依赖注入并不容易,因为框架并不是为了使用它而创建的。
有一个扩展可以让您使用依赖注入:http://www.yiiframework.com/extension/yiipimple
我还没有试过,所以我不能告诉你这个扩展是否能满足你的需求。
发布于 2014-03-28 17:21:40
Zend Framework1也存在同样的问题:框架使用构造器,所以您不能将其用于依赖项注入。
为了在ZF1中集成PHP-DI,我覆盖了框架的"Dispatcher“,也就是负责创建控制器的对象。
通过覆盖它,我可以控制控制器是如何创建的,从而注入依赖项。
https://stackoverflow.com/questions/22689731
复制相似问题