如何从local.php访问配置

时间:2014-10-26 12:21:25

标签: php zend-framework2

我正在将旧密码加密类从ZF1移动到ZF2。在我的原始代码中,我使用zend注册表来存储从application.ini文件中提取的加密盐值。在ZF2中,此设置的逻辑位置将是config / autoload文件夹中的local.php文件。

我的问题如何访问 local.php 文件中指定的salt设置?

我试过了

$this->getServiceLocator()->get('Config'); 

但所有这一切都会产生错误

Call to a member function get() on a non-object
in C:\Users\Garry Childs\Documents\My Webs\freedomw\vendor\freedom\Zend\Filter\EncryptPassword.php on line 59

我还尝试将以下功能添加到 module.php 文件中

public function getConfig()
{
    return include __DIR__ . '/config/module.config.php';
}

并使用

$this->getConfig();

无济于事。

请有人指出我正确的方向,非常感谢。

1 个答案:

答案 0 :(得分:0)

会说您必须为您的密码加密类创建一个工厂并从工厂中的ServiceLocator获取盐并将配置中的盐注入您的类(在构造函数中或使用某些setter) 。

这样的事情:

module.config.php

'service_manager' => array(
    'factories' => array(
        'My\Filter\EncryptPassword' => 'My\Filter\EncryptPasswordFactory',
    )
)

然后在My\Filter\EncryptPasswordFactory.php

<?php
namespace My\Filter;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class EncryptPasswordFactory implements FactoryInterface
{
    /**
     * @param  ServiceLocatorInterface $serviceLocator
     * @return EncryptPasswordService
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $config = $serviceLocator->get('config');
        $salt = ...get salt from config...
        $encryptPasswordService = new EncryptPasswordService($salt);
        return $encryptPasswordService;

...或制作一个setSalt方法或您认为最好的方法......

    }
}

您的My\Filter\EncryptPasswordService.php

<?php
namespace My\Filter;

class EncryptPasswordSevice
{
    /**
     * @param  ServiceLocatorInterface $serviceLocator
     * @return EncryptPasswordService
     */
    public function __construct($salt)
    {
        use your $salt
    }
}

现在,您可以在任何可以访问serviceManager实例(或serviceLocator实例)的地方获取My\Filter\EncryptPassword,如下所示:

$encryptPasswordService = $serviceManager->get('My\Filter\EncryptPassword');