获取配置 Zend Framework 2
Get configuration Zend Framework 2
我有一个 Zend Framework 项目,我试图在 Zend Framework 2 上重写这个项目。在旧项目中,我在 application.ini[ 中有一些依赖于环境的设置=12=]
[Prod]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
theme = Test
copyright = TestText
resources.db.adapter = pdo_mysql
resources.db.params.host = 127.0.0.1
resources.db.params.username = root
resources.db.params.password = adm3
resources.db.params.dbname = test;
我控制了一些来自 aplication.ini 的值。
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$aConfig = $bootstrap->getOptions();
$this->view->assign('theme', $aConfig['theme']);
$this->view->assign('copyright', $aConfig['copyright']);
我用 Zend Framework 2 下载 skeleton-application,添加新模块。但是我怎样才能在我的新项目中做类似的事情呢?我应该在哪里以及如何描述旧项目的设置?我怎样才能找回它?
您可以轻松地为您的 ZF2 模块使用 AbstractOptions class。假设您的 ZF2 模块称为应用程序。所以它存储在/module/Application/文件夹中。
首先你需要 /module/Application/src/Options/ 下的 ModuleOptions class。在此 class 中,您可以写下您的模块所需的所有设置。例如原因我只写版权成员在class。
declare('strict_types=1');
namespace Application\Options;
use Zend\StdLib\AbstractOptions;
class ModuleOptions extends AbstractOptions
{
protected $copyright = 'my copyright';
public function getCopyright() : string
{
return $this->copyright;
}
public function setCopyright(string $copyright) : ModuleOptions
{
$this->copyright = $copyright;
return $this;
}
}
此外,您还需要一个用于模块选项的工厂 class。该工厂可能类似于以下示例。
declare('strict_types=1');
namespace Application\options\Factory;
use Application\Options\ModuleOptions;
use Interop\Container\ContainerInterface;
class ModuleOptionsFactory
{
public function __invoke(ContainerInterface $container) : ModuleOptions
{
$config = $container->get('config');
$options = new ModuleOptions(isset($config['my_settings']) ? $config['my_settings'] : []);
return $options;
}
}
基本上这就是您所需要的。就像下面的例子一样,把它包裹在你的 module.config.php 中。
...
'service_manager' => [
'factories' => [
ModuleOptions::class => ModuleOptionsFactory::class,
]
],
'my_settings' = [
'copyright' => 'another copyright text',
]
ModuleOptions class 从您的 module.config.php 中获取 my_settings 数组,并使其在任何有服务定位器的地方都可以访问。
在控制器中使用的示例
例如,您可以在控制器工厂中使用 ModuleOptions class,如下例所示。
class IndexControllerFactory
{
public function __invoke(ContainerInterface $container)
{
$container = $container->getServiceLocator();
$options = $container->get(ModuleOptions::class);
return new IndexController($options);
}
}
您的 IndexController class 看起来像这样。在此示例中,我们避免在控制器本身中调用服务定位器,因为这是一种不好的做法。我们只是将选项作为参数传递给构造函数。
class IndexController extends AbstractActionController
{
protected $options;
public function __construct(ModuleOptions $options)
{
$this->options = $options;
}
public function indexAction()
{
return [
'copyright' => $this->options->getCopyright(),
];
}
尽情享受吧! ;)
我有一个 Zend Framework 项目,我试图在 Zend Framework 2 上重写这个项目。在旧项目中,我在 application.ini[ 中有一些依赖于环境的设置=12=]
[Prod]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 1
theme = Test
copyright = TestText
resources.db.adapter = pdo_mysql
resources.db.params.host = 127.0.0.1
resources.db.params.username = root
resources.db.params.password = adm3
resources.db.params.dbname = test;
我控制了一些来自 aplication.ini 的值。
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$aConfig = $bootstrap->getOptions();
$this->view->assign('theme', $aConfig['theme']);
$this->view->assign('copyright', $aConfig['copyright']);
我用 Zend Framework 2 下载 skeleton-application,添加新模块。但是我怎样才能在我的新项目中做类似的事情呢?我应该在哪里以及如何描述旧项目的设置?我怎样才能找回它?
您可以轻松地为您的 ZF2 模块使用 AbstractOptions class。假设您的 ZF2 模块称为应用程序。所以它存储在/module/Application/文件夹中。
首先你需要 /module/Application/src/Options/ 下的 ModuleOptions class。在此 class 中,您可以写下您的模块所需的所有设置。例如原因我只写版权成员在class。
declare('strict_types=1');
namespace Application\Options;
use Zend\StdLib\AbstractOptions;
class ModuleOptions extends AbstractOptions
{
protected $copyright = 'my copyright';
public function getCopyright() : string
{
return $this->copyright;
}
public function setCopyright(string $copyright) : ModuleOptions
{
$this->copyright = $copyright;
return $this;
}
}
此外,您还需要一个用于模块选项的工厂 class。该工厂可能类似于以下示例。
declare('strict_types=1');
namespace Application\options\Factory;
use Application\Options\ModuleOptions;
use Interop\Container\ContainerInterface;
class ModuleOptionsFactory
{
public function __invoke(ContainerInterface $container) : ModuleOptions
{
$config = $container->get('config');
$options = new ModuleOptions(isset($config['my_settings']) ? $config['my_settings'] : []);
return $options;
}
}
基本上这就是您所需要的。就像下面的例子一样,把它包裹在你的 module.config.php 中。
...
'service_manager' => [
'factories' => [
ModuleOptions::class => ModuleOptionsFactory::class,
]
],
'my_settings' = [
'copyright' => 'another copyright text',
]
ModuleOptions class 从您的 module.config.php 中获取 my_settings 数组,并使其在任何有服务定位器的地方都可以访问。
在控制器中使用的示例
例如,您可以在控制器工厂中使用 ModuleOptions class,如下例所示。
class IndexControllerFactory
{
public function __invoke(ContainerInterface $container)
{
$container = $container->getServiceLocator();
$options = $container->get(ModuleOptions::class);
return new IndexController($options);
}
}
您的 IndexController class 看起来像这样。在此示例中,我们避免在控制器本身中调用服务定位器,因为这是一种不好的做法。我们只是将选项作为参数传递给构造函数。
class IndexController extends AbstractActionController
{
protected $options;
public function __construct(ModuleOptions $options)
{
$this->options = $options;
}
public function indexAction()
{
return [
'copyright' => $this->options->getCopyright(),
];
}
尽情享受吧! ;)