您好,
在Zend Framwork 1中,我曾经有一个application\configs\appsettings.xml
,我曾经在那里存储参数和值,例如Rest API URL的主机名,调试设置以及dev,test和prod环境的其他应用程序特定设置。我可以在所有控制器和模型中使用此注册表,并在index.php中创建
$applicationEnvironment = 'development';
$config = new Zend_Config_Xml( APPLICATION_PATH . '/configs/appsettings.xml',
$applicationEnvironment, true );
Zend_Registry::set( 'config', $config );
如何在Zend Framework 2中实现类似的功能?
由于
答案 0 :(得分:7)
ZF2中没有Registry
这样的东西,因为它是一种反模式。它只是对全局变量的一种奇特替换,它可能会在您的应用程序中引起各种不必要的副作用。
在ZF2中,您拥有serviceManager,这允许将所有依赖项干净地注入控制器/模型/服务。 config / autoload目录中的所有配置文件都由ZF2自动合并到一个单独的数组中,您可以使用$serviceLocator->get('Config')
从服务管理器中检索此文件。每当您需要在控制器中使用配置时,只需创建一个serviceFactory并注入配置。
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;
},
),
);
}
}
为简单起见,上面的工厂被定义为封闭,但我建议创建一个单独的工厂类。有许多资源可以解释如何做到这一点。
在这个例子中,我们注入了完整的配置,但根据你的使用情况,通常最好只注入你需要的配置密钥。
或者,您可以将某些配置值包装到具有显式getter和setter的专用配置对象中,并将其注入您的控制器。 Zend\StdLib\AbstractOptions
可以为您提供帮助。
答案 1 :(得分:1)
如果您希望使用配置文件并且您无法访问Service Manager,或者您希望向其中写入内容,则可以使用Zend \ Config
要阅读,您可以执行以下操作:
$config = new Config(include 'config/autoload/my_amazing_config.global.php');
$details = $config->get('array_key')->get(sub_key)->toArray();
要写信,你可以这样做:
// Create the config object
$config = new Zend\Config\Config(array(), true);
$config->production = array();
$config->production->webhost = 'www.example.com';
$config->production->database = array();
$config->production->database->params = array();
$config->production->database->params->host = 'localhost';
$config->production->database->params->username = 'production';
$config->production->database->params->password = 'secret';
$config->production->database->params->dbname = 'dbproduction';
$writer = new Zend\Config\Writer\Xml();
echo $writer->toString($config);
类支持ini,xml,phpArray,json,yaml
您可以在以下网址阅读更多内容: http://framework.zend.com/manual/2.2/en/modules/zend.config.introduction.html