【问题标题】:Call service,factory in any where in the zf2 project在zf2项目中的任何地方调用服务,工厂
【发布时间】:2013-06-27 19:35:50
【问题描述】:

我是 zend 框架的新手。我担心如何从控制器(或未扩展的类AbstractActionController)调用服务、工厂。

我正在使用 ZfcUser 模块对用户进行身份验证。现在我想检查 ZfcUser\Form\Base 类中是否有用户登录。我无法调用 ZfcUser\Module

getControllerPluginConfig() 内的 zfcUserAuthentication 工厂

请有人帮助我。

谢谢

【问题讨论】:

    标签: php zend-framework2 zfcuser


    【解决方案1】:

    您看到的是Dependency Injection 的概念。基本上,您需要确保您创建的服务能够访问他们需要的网关或服务。

    例如,如果您有一个服务负责将您的实体(数据对象)持久化到数据库中,那么您需要确保将数据库适配器“注入”到服务对象中。

    因此应通过构造函数注入设置必需的依赖项,即:

    class MyService {
        public function __construct(DbAdapter $dbA) {
            // do stuff with $dbA
        }
    }
    

    然后你通过 ServiceManager 创建它

    'service_manager' => array(
        'factories' => array(
            'MyService' => function($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $service   = new MyService($dbAdapter);
                 return $service;
             }
        )
    )
    

    最后你通过 ServiceManager 访问你的服务(可能在你的控制器的某个地方)。

    public function someAction() {
        $service = $this->getServiceLocator()->get('MyService');
        // do stuff with $service
    }
    

    【讨论】:

    • 谢谢@Sam。我明白了。
    • 但是我们如何在构造函数中调用服务。当我尝试时,我遇到了致命错误。你能帮忙吗?
    • @ManikThakur 请打开一个新问题。注入发生在构造函数中,一旦正确注入,您就可以访问它。确保将错误粘贴到您自己的线程中。
    • @Sam 我只是因为这个线程的标题才在这里问的。任何地方意味着它也可以在构造函数中。
    • @ManikThakur 我的意思是:我不知道你的问题是什么。 5 年前的帖子中的评论部分不是寻求帮助的地方;)
    【解决方案2】:

    您需要注入给定服务/类所依赖的服务/类。在您的情况下,您应该修改 ZfcUser\Form\Base 以通过构造函数或 setter 函数接受该类。然后,您将修改创建ZfcUser\Form\Base 实例的服务工厂以注入依赖项。

    例如:

    ZfcUser\Form\Base

    private $myDependency;
    
    public function setMyDependency($dependency) {
        $this->myDependency = $dependency;
    }
    

    如果您在服务工厂配置中使用闭包,例如:

    'my_service_that_uses_zfcuser_form_base' => function($sm) {
        $form = new ZfcUser\Form\Base();
        $form->setMyDependency($sm->get('the_dependency_you_want'));
        return $form;
    }
    

    避免注入服务管理器,这是不好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多