Zend framework2 全局和模块配置交互
假设我有全局应用程序配置Zend framework2 全局和模块配置交互,zend-framework2,Zend Framework2,假设我有全局应用程序配置 return array( 'languages' => array( 'allowed' => array('de', 'en'), ), ); 我有模块配置和路由描述。我需要基于全局配置的路由,因此我需要读取模块中的全局应用程序配置,以便根据语言->允许值(段类型路由的约束)组合路由 从模块配置脚本获取全局配置值的最佳方法是什么?操作配置文件中的数据而不是简单的数组返回是否正确?您应该在解决问题之前多想一想。您希望根据配置创建路由结构。
return array(
'languages' => array(
'allowed' => array('de', 'en'),
),
);
我有模块配置和路由描述。我需要基于全局配置的路由,因此我需要读取模块中的全局应用程序配置,以便根据语言->允许值(段类型路由的约束)组合路由
从模块配置脚本获取全局配置值的最佳方法是什么?操作配置文件中的数据而不是简单的数组返回是否正确?您应该在解决问题之前多想一想。您希望根据配置创建路由结构。配置可以来自任何地方:模块配置、本地配置和全局配置。因此,很难将模块的配置基于全局配置 您可以做的是稍后创建管线。例如,在模块
Foo
中创建如下配置:
'routes_foo' => array(
'bar' => array(
'type' => 'segment',
'options' => array(
'route' => ':locale/foo/bar',
'constraints' => array(
'locale' => '%LOCALE%',
),
),
),
),
在你的模块课程中:
namespace Foo;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager();
$config = $sm->get('config');
$routes = $config['routes_foo');
$locales = $config['languages']['allowed'];
$routes = $this->replace($routes, array(
'%LOCALE%' => sprintf('(%s)', implode('|', $locales)
);
$router = $sm->get('router');
$router->routeFromArray($routes);
}
public function replace($array, $variables)
{
foreach ($array as $key => $value) {
if (is_array($value)) {
$array[$name] = $this->replace($value, $variables);
}
if (array_key_exists($value, $variables)) {
$array[$name] = $variables[$value];
}
}
return $array;
}
}
发生的事情是从配置中获取路由(这些路由不会自动注入路由器)。在这里,您还可以从全局配置加载所有语言。然后,您的“自定义”路由(在多个位置)有一个“魔术”配置键,该键将被区域设置的正则表达式约束所取代:
(en | de)
。然后,解析后的配置被注入路由器。谢谢,Jurian。这对我帮助很大