問題をもう少し先に考えるべきです。構成に基づいてルート構造を作成したいと考えています。構成は、モジュール構成、ローカル構成、グローバル構成など、どこからでも取得できます。したがって、モジュールの構成をグローバル構成に基づいて行うことは非常に困難です。
できることは、後でルートを作成することです。たとえば、モジュールで次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)
。その解析された構成は、ルーターに挿入されます。