0

グローバルなアプリケーション構成があるとしましょう

return array(

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

);

そして、ルートの説明を含むモジュール構成があります。グローバル構成に基づいてルートが必要なので、モジュール内のグローバル アプリケーション構成を読み取って、言語に従ってルートを構成する必要があります-> 許可された値 (セグメント タイプ ルートの制約)

モジュール構成スクリプトからグローバル構成値を取得する最良の方法は何ですか? 単純な配列を返すのではなく、構成ファイル内のデータを操作するのは正しいですか?

4

1 に答える 1

2

問題をもう少し先に考えるべきです。構成に基づいてルート構造を作成したいと考えています。構成は、モジュール構成、ローカル構成、グローバル構成など、どこからでも取得できます。したがって、モジュールの構成をグローバル構成に基づいて行うことは非常に困難です。

できることは、後でルートを作成することです。たとえば、モジュールで次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)。その解析された構成は、ルーターに挿入されます。

于 2013-01-23T23:56:54.637 に答える