加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

zend-framework2 – ZF2如何从控制器外部获取实体管理器

发布时间:2020-12-13 22:35:14 所属栏目:PHP教程 来源:网络整理
导读:我们可以使用$this- getServiceLocator() – get(‘doctrine.entitymanager.orm_default’)访问控制器内的实体管理器; 但是我们怎样才能在Zendframework 2中的项目的其余部分访问实体管理器单例实例. “正确”的方法是使用工厂将实体管理器注入任何需要它的
我们可以使用$this-> getServiceLocator() – > get(‘doctrine.entitymanager.orm_default’)访问控制器内的实体管理器;

但是我们怎样才能在Zendframework 2中的项目的其余部分访问实体管理器单例实例.

“正确”的方法是使用工厂将实体管理器注入任何需要它的类.除工厂之外的类不应该真正了解ServiceLocator.所以,你的模块配置看起来像这样:
'controllers' => array(
     'factories' => array(
          'mycontroller' => 'MyNamespaceMyControllerFactory'
     )
 )

然后你的工厂类看起来像这样:

use ZendServiceManagerFactoryInterface;
use ZendServiceManagerServiceLocatorInterface;

class MyControllerFactory implements FactoryInterface
{

    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $serviceLocator = $serviceLocator->getServiceLocator();

        $myController = new MyController;
        $myController->setEntityManager(
            $serviceLocator->get('doctrine.entitymanager.orm_default')
        );

        return $myController;
    }
}

对于需要使用实体管理器的任何其他类,遵循相同的模式.

如果您有许多使用实体管理器的类,您可能需要考虑将自己的Initalizer添加到SerivceManager,它将注入实体管理器而无需工厂.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读