gpt4 book ai didi

php - 如何在 Zend Framework 2 中编写和使用配置文件

转载 作者:行者123 更新时间:2023-12-04 01:30:12 25 4
gpt4 key购买 nike

你好,

在 Zend Framwork 1 中,我曾经有一个 application\configs\appsettings.xml,我用来存储参数和值,例如 Rest API URL 的主机名、调试设置和其他应用程序特定设置适用于开发、测试和生产环境。我可以在所有 Controller 和模型中使用这个注册表,它是在 index.php 中创建的

   $applicationEnvironment = 'development';
$config = new Zend_Config_Xml( APPLICATION_PATH . '/configs/appsettings.xml',
$applicationEnvironment, true );
Zend_Registry::set( 'config', $config );

如何在 Zend Framework 2 中实现类似的功能?

谢谢

最佳答案

在 ZF2 中没有 Registry 这样的东西,因为它是一种反模式。它只是对全局变量的奇特替代,可能会在您的应用程序中导致各种不需要的副作用。

在 ZF2 中,您有 serviceManager,这允许将所有依赖项干净地注入(inject)到您的 Controller /模型/服务中。 config/autoload 目录中的所有配置文件由 ZF2 自动合并到一个数组中,您可以使用 $serviceLocator->get('Config') 从服务管理器中检索它。每当您需要在 Controller 中使用配置时,只需创建一个 serviceFactory 并注入(inject)配置即可。

class FooController
{
protected $config;

public __construct($config)
{
$this->config = $config;
}

public barAction()
{
//use $this->config
}
}

class Module
{
public function getControllerConfig()
{
return array(
'factories' => array(
'fooController' => function(ControllerManager $cm)
{
$sm = $cm->getServiceLocator();
$config = $sm->get('Config');
$controller = new FooController($config);
return $controller;
},
),
);
}
}

为了简单起见,上面的工厂被定义为闭包,但我建议创建一个单独的工厂类。有很多资源可以解释如何做到这一点。

在这个例子中,我们注入(inject)了完整的配置,但根据您的用例,通常只注入(inject)您需要的配置 key 会更好。

或者,您可以将某些配置值包装到具有显式 getter 和 setter 的专用配置对象中,并将其注入(inject)到您的 Controller 中。 Zend\StdLib\AbstractOptions 可以帮助您。

关于php - 如何在 Zend Framework 2 中编写和使用配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21738220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com