首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >全局和模块配置交互

全局和模块配置交互
EN

Stack Overflow用户
提问于 2013-01-24 05:53:13
回答 1查看 89关注 0票数 0

假设我有全局应用程序配置

代码语言:javascript
运行
复制
return array(

'languages' => array(
    'allowed'   => array('de', 'en'),
),

);

并且我有包含路由描述的模块配置。我需要基于全局配置的路由,因此我需要读取模块中的全局应用程序配置,以便根据语言->允许值(段类型路由的约束)组成路由

从模块配置脚本获取全局配置值的最佳方法是什么?在配置文件中操作数据而不是简单的数组返回是正确的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-24 07:56:55

在你的问题之前,你应该多考虑一下。您希望根据您的配置创建路由结构。配置可以来自任何地方:模块配置、本地配置和全局配置。因此,很难将模块的配置建立在全局配置的基础上。

您所能做的就是稍后创建路由。例如,您可以在模块Foo中创建如下配置:

代码语言:javascript
运行
复制
'routes_foo' => array(
  'bar' => array(
    'type'    => 'segment',
    'options' => array(
      'route' => ':locale/foo/bar',
      'constraints' => array(
        'locale' => '%LOCALE%',
      ),
    ),
  ),
),

在你的模块类中:

代码语言:javascript
运行
复制
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)。然后将解析后的配置注入路由器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14490113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档