Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework2具有不同配置的服务工厂_Php_Zend Framework_Zend Framework2 - Fatal编程技术网

Php Zend Framework2具有不同配置的服务工厂

Php Zend Framework2具有不同配置的服务工厂,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我正在使用Zend Framework2,并创建了一个为我做一些工作的服务。 此服务用于创建PDF文件,需要使用运行Apache FOP的主机名进行配置 我已经编写了一个PdfServiceFactory(implements\Zend\ServiceManager\FactoryInterface),它创建了一个PdfService实例,并使用所需的主机名对其进行配置 出于对这个问题不重要的原因,我们需要多个这样的服务,每个服务都配置了不同的主机名。 使用这些服务的代码不知道有多个。他们只接受

我正在使用Zend Framework2,并创建了一个为我做一些工作的服务。 此服务用于创建PDF文件,需要使用运行Apache FOP的主机名进行配置

我已经编写了一个PdfServiceFactory(implements\Zend\ServiceManager\FactoryInterface),它创建了一个PdfService实例,并使用所需的主机名对其进行配置

出于对这个问题不重要的原因,我们需要多个这样的服务,每个服务都配置了不同的主机名。 使用这些服务的代码不知道有多个。他们只接受一项服务,只需使用一项即可

最好的方法是什么

  • 我是否需要使用interface FactoryInterface为此编写另一个工厂
  • 我可以在module.config.php中为每个将传递到工厂的条目设置参数吗
  • 还有别的吗
我很熟悉Symfony2处理这个问题的方式,在那里做起来很容易。因为您可以简单地定义多个服务,并在每个服务中传递不同的参数

在symfony中,它将如下所示:

pdfservice.one:
    class: \Name\Space\PdfService
    arguments:
        - hostname.tld

pdfservice.two:
    class: \Name\Space\PdfService
    arguments:
        - anotherhostname.tld

但是如何在ZendFramework2中实现这一点而不创建大量工厂。

您需要实例化服务并在之后注入所需的参数。就我个人而言,我创建了多个工厂(实例化同一个类,注入不同的参数)。但是,如果构造函数参数相同(只是配置不同),则可以创建一个抽象工厂(实现
Zend\ServiceManager\AbstractFactoryInterface
)。之后注入会将服务配置的逻辑移动到多个位置,这是由于明显的原因而不需要的。如果您请求服务X,它应该可以运行了。AbstractFactorys可以工作,但我不喜欢在容器无法找到其他方法时检查它们。在ZendFramework2中,多个工厂类可能是最好的方法。虽然它也可以与配置文件中的闭包结合使用,但可能会使它更干净一些。