Php 呼叫服务,zf2项目中任何地方的工厂
我是zend框架的新手。我担心如何调用服务,而不是从控制器(或未扩展的类)调用工厂 我正在使用ZfcUser模块对用户进行身份验证。现在我想检查是否有用户登录到ZfcUser\Form\Base类中。我无法调用ZfcUser\Module中getControllerPluginConfig()中的zfcUserAuthentication工厂 请找个人来帮我Php 呼叫服务,zf2项目中任何地方的工厂,php,zend-framework2,zfcuser,Php,Zend Framework2,Zfcuser,我是zend框架的新手。我担心如何调用服务,而不是从控制器(或未扩展的类)调用工厂 我正在使用ZfcUser模块对用户进行身份验证。现在我想检查是否有用户登录到ZfcUser\Form\Base类中。我无法调用ZfcUser\Module中getControllerPluginConfig()中的zfcUserAuthentication工厂 请找个人来帮我 谢谢您需要注入给定服务/类所依赖的服务/类。在您的情况下,您应该修改ZfcUser\Form\Base以通过构造函数或setter函数接受
谢谢您需要注入给定服务/类所依赖的服务/类。在您的情况下,您应该修改
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;
}
避免注入服务管理器,这是一种糟糕的做法。您需要注入给定服务/类所依赖的服务/类。在您的情况下,您应该修改
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;
}
避免注入服务管理器,这是不好的做法。您看到的是服务管理器的概念。基本上,您需要确保您创建的服务能够访问它们所需的网关或服务 例如,如果您有一个服务负责将实体(DataObjects)持久化到数据库,那么您需要确保将数据库适配器“注入”到ServiceObject中 因此,应通过构造函数注入设置所需的依赖项,即:
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(可能在控制器中的某个位置)访问您的服务
你所看到的是一个概念。基本上,您需要确保您创建的服务能够访问它们所需的网关或服务 例如,如果您有一个服务负责将实体(DataObjects)持久化到数据库,那么您需要确保将数据库适配器“注入”到ServiceObject中 因此,应通过构造函数注入设置所需的依赖项,即:
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(可能在控制器中的某个位置)访问您的服务
谢谢@Sam。我知道了。但是我们如何在构造函数中调用服务。当我尝试时,我犯了致命的错误。你能在这方面提供帮助吗?@ManikThakur请打开一个新的问题。注入发生在构造函数中,一旦正确注入,您就可以访问它。请确保将错误粘贴到您自己的线程中。@Sam我刚才问这个问题是因为这个线程的标题。“任何地方都意味着它也可以在构造函数中。”ManikThakur我的观点是:我不知道你的问题是什么。5年前的帖子中的评论部分不是寻求帮助的地方;)谢谢@Sam。我知道了。但是我们如何在构造函数中调用服务。当我尝试时,我犯了致命的错误。你能在这方面提供帮助吗?@ManikThakur请打开一个新的问题。注入发生在构造函数中,一旦正确注入,您就可以访问它。请确保将错误粘贴到您自己的线程中。@Sam我刚才问这个问题是因为这个线程的标题。“任何地方都意味着它也可以在构造函数中。”ManikThakur我的观点是:我不知道你的问题是什么。5年前的帖子中的评论部分不是寻求帮助的地方;)