0

Zend Framework 2 アプリには、'nl' (デフォルト) と 'en' の 2 つの言語があります。「nl」のリクエスト URL は次のようになります。

/controller/action

そして「en」の場合:

/en/controller/action

まず、デフォルトの言語を次のようにルーティング/書き換えたい:

/nl/コントローラー/アクション

後で次のようなセグメント ルートを使用できるようにするため:

[:lang/[:controller/[:action]]]

以下の正規表現ルートでこれを試しました(否定的な先読みで)

'lang' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex',
    'options' => array(
        'regex' => '/(?!en)(.*)',
        'spec'  => '/nl$2',
     ),
),

(このルートはコントローラー/アクションにマップするべきではなく、URL を新しいものに書き換えるだけです)

しかし、私は得る:

Page not found.

The requested controller could not be mapped to an existing controller class.

正しく機能するルートとは? それとも、Web サーバーの書き換えを使用する方が良いですか?

4

2 に答える 2

1

ルートは

/[:lang/[:controller/[:action]]]
于 2013-01-08T23:28:56.293 に答える
0

正規表現ルートは必要ありません。以下も同様に機能します。言語セグメントはオプションです。私のアプリケーションでは、「en」しか指定できず、省略した場合のデフォルトは「nl」です。

'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'language' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '[:lang/]',
                            'constraints' => array(
                                'lang'       => 'en',
                            ),
                            'defaults' => array(
                                'lang' => 'nl',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
于 2013-01-29T10:47:59.980 に答える