0

在 Zend Framework 2 应用程序中,我有两种语言,“nl”(默认)和“en”。'nl' 的请求网址如下:

/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 回答