我正在将旧密码加密类从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();
无济于事。
请有人指出我正确的方向,非常感谢。
答案 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');