mxc-commons / mxc-generics
Zend Framework 2 模块,提供一些有用的基本资源,便于重用和便利。
Requires
- php: >=5.3.3
- zendframework/zend-eventmanager: >=2.1
- zendframework/zend-form: ~2.1
- zendframework/zend-inputfilter: ~2.1
- zendframework/zend-modulemanager: >=2.1
- zendframework/zend-mvc: >=2.1
- zendframework/zend-servicemanager: >=2.1
- zendframework/zend-stdlib: ~2.1
- zendframework/zend-validator: ~2.1
This package is auto-updated.
Last update: 2024-08-29 04:16:51 UTC
README
版本 0.1.0 由 Frank Hein 和 mxc-commons 团队创建。
MxcGenerics 是德国 maxence business consulting gmbh 的 maxence 开源计划的一部分。
简介
MxcGenerics 提供我们在开发中使用的通用类和资源。maxence 的其他模块依赖于 MxcGenerics。
特性 / 目标
MxcGenerics 的主要设计目标是封装常用通用功能。
要求
- Zend Framework 2(最新主分支)
安装
主要设置
通过克隆项目
- 将此项目克隆到您的
./vendor/
目录中。
使用 composer
-
在您的 composer.json 中添加此项目
"require": { "mxc-commons/mxc-generics": "dev-master" }
-
现在运行以下命令让 composer 下载 MxcGenerics:
$ php composer.phar update
安装后
-
在您的
application.config.php
文件中启用它。<?php return array( 'modules' => array( // ... 'MxcGenerics', ), // ... );
包内容
目录:表单
EventProviderForm
从 Zend\Form\Form 派生的类,能够触发事件。
EventForm
从 EventProviderForm 派生的类,发出 EVENT_PRE_BIND、EVENT_PRE_PREPARE 和 EVENT_PRE_VALIDATE 事件。
目录:会话
SessionManagerFactory
创建 Zend\Session\SessionManager 的类。可以通过 'session'
配置键提供配置选项。
目录:Stdlib
GenericRegistry
GenericRegistry 类与 Zend\Stdlib\AbstractOptions 相似。它利用魔术函数为每个值模拟一个设置器和获取器。内部数据存储在关联数组中。
$registry = new GenericRegistry();
$registry->setKneel(72);
$registry->setPray(42);
echo $registry->getKneel();
echo $registry->getPray();
output: 72 42
GenericOptions
GenericOptions 是从 GenericRegistry 派生的类。在构造时,它期望一个结构如下所示的数组:
$myOptions => array(
'options' => array(
'set1' => array(
'value1' => 10,
'value2' => 20,
...
),
'set2' => array(
'value1' => 32,
),
),
'defaults' => array(
'value1' => 1,
'value2' => 2,
),
);
在构造时,GenericOptions 使用默认部分的值进行初始化。如果指定了(可选的)选项集,则这些选项集将在之后应用,并扩展/覆盖默认选项。
$options = new GenericOptions($myOptions);
echo $options->getValue1(); //-- output 1
echo $options->getValue2(); //-- output 2
$options = new GenericOptions($myOptions, 'set1');
echo $options->getValue1(); //-- output 10
echo $options->getValue2(); //-- output 20
$options = new GenericOptions($myOptions, 'set2');
echo $options->getValue1(); //-- output 32
echo $options->getValue2(); //-- output 2
StringHelper
字符串辅助函数集合。目前该类包含一个静态成员。formatVarExport 的目的是使数组 var_export 输出看起来更美观。
目录:Stdlib\Hydrator
ClassMethods
从 Zend\Stdlib\Hydrator\ClassMethods 派生的 hydrator。根据与其他 hydrator 的行为兼容性原因,覆盖了 __construct()
参数的默认值。
目录:ServiceManager
GenericPluginManager
从 Zend\ServiceManager\AbstractPluginManager 派生的类。将插件与一组 GenericOptions 关联。
'my_plugin_options' => array(
'plugin1' => array(
//-- see GenericOptions above
),
'plugin2' => array(
//-- see GenericOptions above
)
),
'my_plugins' => array(
'invobables' => array(
'plugin1' => 'My\Namespace\MyClass1',
'plugin2' => 'My\Namespace\MyClass2',
),
),
GenericPluginManagerFactory
从 Zend\Mvc\Service\AbstractPluginManagerFactory 派生的类。将设置选项应用于 GenericPluginManager。
如果您从 GenericPluginManager 派生了一个插件管理器并将其注册到应用程序的 onInit 中,您将像这样实现您的类工厂
class FirewallManagerFactory extends GenericPluginManagerFactory {
const PLUGIN_MANAGER_CLASS = 'MxcFirewall\FirewallManager\FirewallManager';
/**
* @see \Zend\ServiceManager\FactoryInterface::createService()
*/
public function createService(ServiceLocatorInterface $serviceLocator) {
$config = $serviceLocator->get('Configuration');
$this->setup = array(
'plugin_options' => 'firewall-options',
);
$plugins = parent::createService($serviceLocator);
return $plugins;
}
}
如果您想创建一个不带全局注册的插件管理器,您将创建一个类似这样的工厂(ListenerManager 是此示例中从 GenericPluginManager 派生的类)
class ListenerManagerFactory implements FactoryInterface {
/*
* @see \Zend\ServiceManager\FactoryInterface::createService()
*/
public function createService(ServiceLocatorInterface $serviceLocator) {
$config = $serviceLocator->get('Configuration');
$config = isset($config['firewall-listeners']) ? $config['firewall-listeners'] : null;
$config = new Config($config);
$plugins = new ListenerManager($config);
$plugins->setup(array('plugin_options' => 'firewall-listener-options'));
return $plugins;
}
}
目录:ServiceManager/Plugin
AbstractPlugin
AbstractPlugin
是由 GenericPluginManager
维护的所有插件的基础类。派生的 PluginManagers 应根据您从 AbstractPlugin
派生的特定服务类覆盖 GenericPluginManager::isValid()
。
AbstractPlugin
通过 GenericPluginManager
处理服务选项设置。
此外,AbstractPlugin
提供了一个通用的辅助函数 translateVars
,用于替换选项值中的字符串。派生类应根据其需要重写 getVars()
。
public function getRootDirectory() {
return 'C:\';
}
public function getVars() {
return array(
'%rootDirectory% => $this->getRootDirectory(),
'%myOtherReplacement% => 'test',
);
}
$value1 = '%rootDirectory%' . 'temp';
$value2 = '%myOtherReplacement%' . 'ing';
$value3 = 'myOption';
echo $this->translateVars($value1); //-- output: 'C:\temp'
echo $this->translateVars($value2); //-- output: 'testing'
echo $this->translateVars($value3); //-- output: 'myOption';
AbstractGenerator
示例类演示了如何实现一个插件,该插件允许通过参数覆盖特定方法的运行时选项。
abstract class AbstractGenerator extends AbstractPlugin {
protected $optionStack;
public function generate($params, $options = null) {
$this->getOptionStack()->push($this->options);
$this->options = $this->getActualOptions($params, $options);
$result = $this->doGenerate($this->options);
$reset = $this->options->getResetOptionsAfterRun();
$this->options = $this->optionStack->pop();
if ($reset) $this->resetOptions();
return $result;
}
public function doGenerate($options) {
//abstract
}
protected function getOptionStack() {
if (!$this->optionStack) {
$this->optionStack = new SplStack();
}
return $this->optionStack;
}
public function resetOptions() {
parent::resetOptions();
$this->optionStack = new SplStack();
}
}
我们在这里使用 SplStack 栈来保存当前选项。然后,参数与选项合并,从而覆盖/扩展它们。使用合并后的选项集调用 doGenerate
。之后,从栈中恢复原始选项。
如果插件选项包含值为 true
的 reset_options_after_run
,则插件将恢复到默认设置,并清空选项栈。
致谢
我们在许多模块中看到了类似 EventProviderForm
的东西。
许可证
MxcGenerics 在 New BSD 许可证下发布。请参阅 license.txt
。