1

www.mydomain.com/en/aboutus のような URL をどのように一致させることができますか?

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

zf2モジュールのルーティング構成で?

zf1では、このようなもので修正します

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

しかし、アプローチは私たちが望むものです最初にURLの言語を特定し、次にユーザーが要求しているコントローラーまたはアクションを調べます

4

2 に答える 2

2

zf2 はルーターでヒラキーをサポートしているため、ルートをツリーのように構築できます

あなたの状況では、たとえば、URLのlangに一致する親ルートを作成する必要があります

www.mydomain.com/en または www.mydomain.com/faまたはwww.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 テキストと一致することがわかるように、この例では、子のルートが内部ページをチェックます

于 2012-12-07T18:42:33.550 に答える
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',
                                ),
                            ),
                        ),
                    ),
                ),

             ),
         ),
     ); 
于 2013-05-11T07:50:10.970 に答える