Model中的Zend 2 ServiceLocator实例

时间:2013-05-30 08:31:45

标签: php zend-framework2 service-locator

我有一个模型类User,它有两个字段:

$ job_id - >在JobTable中暂停ID工作 $ job - >需要使用JobTable

中的正确对象延迟加载(在getJob()上)

我的问题是我无法通过我的类获取JobTable的实例,因为我无法访问serviceLocator实例(总是Null)。我的课程如下:

use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;



class User implements ServiceLocatorAwareInterface {
      protected $serviceLocator;

      public function setServiceLocator(ServiceLocatorInterface $serviceLocator) {
        $this->serviceLocator = $serviceLocator;
      }

      public function getServiceLocator() {
        return $this->serviceLocator;
      }

      protected $role;
      protected $role_id;

      public function getRole()
      {
        $roleTable = $this->serviceLocator->get('Core\Model\RoleTable'); // serviceLocator is always null
      }
}

有没有更好的方法可以不使用其他ORM(Doctrine等)。我的目的是在每个Model类中实现我自己的延迟加载。

1 个答案:

答案 0 :(得分:0)

我建议调查dependency injection以注入您需要的依赖项。

如果您仍想使用ServiceLocator模式,则必须通过其他服务管理器检索此模型类,以便检查该类是否为ServiceLocatorAware。如果是,则获得对ServiceLocator集的依赖。 我不推荐这种方法。