url路由中的zf2匹配语言

时间:2012-12-07 18:42:34

标签: localization internationalization url-routing zend-framework2

如何将 www.mydomain.com/en/aboutus 等网址与

匹配
controller -> index
action -> aboutus
lang -> en

在zf2模块路由配置中?

在zf1中我们通过类似的东西来解决这个问题

$route = new Zend_Controller_Router_Route(
    '/contact/:lang',
    array(
        'module' => 'default',
        'controller' => 'contact',
        'action' => 'index'
    )
);

但aproeach是另一回事 我们首先要确定url中的语言是什么,然后查看用户请求的控制器或操作

2 个答案:

答案 0 :(得分:2)

zf2在路由器中具有hirachy支持,因此您可以像树一样构建路由

根据您的情况,您必须创建一个与URL中的lang匹配的父路由,例如

www.mydomain.com/enwww.mydomain.com/fawww.mydomain.com/de或....

然后孩子们为别人写路线

代码示例:

'langroute' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/[:lang]',
                    'defaults' => array(
                        'lang' => 'en',
                    ),
                    'constraints' => array(
                        'lang' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'home' => array(
                        'type' => 'Zend\Mvc\Router\Http\Literal',
                        'options' => array(
                            'route' => '/',
                            'defaults' => array(
                                'controller' => 'Application\Controller\Index',
                                'action' => 'index',
                            ),
                        ),
                    ),
                    // The following is a route to simplify getting started creating
                    // new controllers and actions without needing to create a new
                    // module. Simply drop new controllers in, and you can access them
                    // using the path /application/:controller/:action
                    'aboutus' => array(
                        'type' => 'Zend\Mvc\Router\Http\Literal',
                        'options' => array(
                            'route' => '/aboutus',
                            'defaults' => array(
                                'controller' => 'Application\Controller\Index',
                                'action' => 'aboutus',
                            ),
                        ),
                    ),
),

你可以看到langrout匹配en de fa或... lang文本 然后childern路线检查内页 在此示例中,网址www.mydomain.com/en/与lang en 和路线 home 匹配

答案 1 :(得分:1)

请在您的模块 module.config.php

中添加此代码
  return array(
    'router' => array(
        'routes' => array(
               // The following is a route to simplify getting started creating
                // new controllers and actions without needing to create a new
                // module. Simply drop new controllers in, and you can access them
                // using the path /Module_Name/:controller/:lang/:action
                'your_route_name_here' => array(
                    'type'    => 'Literal', 
                    'options' => array(
                        'route'    => '/',
                        'defaults' => array(
                            '__NAMESPACE__' => 'Module_Name\Controller',
                            'controller'    => 'Index',
                            'action'        => 'index',

                        ),
                    ),
                    'may_terminate' => true,
                    'child_routes' => array(
                        'default' => array(
                            'type'    => 'Segment',
                            'options' => array(
                                'route'    => '/[:controller][/:lang][/:action]',
                                'constraints' => array(
                                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                    'lang'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                       'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                                ),
                                'defaults' => array(
                                   'controller'    => 'Index',
                                   'lang'        => 'en',
                                   'action'        => 'index',
                                ),
                            ),
                        ),
                    ),
                ),

             ),
         ),
     );