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

时间:2014-02-12 19:53:07

标签: php zend-framework2

您好,

在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中实现类似的功能?

由于

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