Pergunta

Estou criando um aplicativo multilíngue usando ZF2.e não pode determinar como adicionar uma URL parcial que formará a base de cada URL, independentemente dos módulos.

http://localhost/en/us/application/index/index/

Eu entendo perfeitamente como configurar /[:namespace[/:controller[/:action]]] usando DI

http://localhost/application/index/index/
http://localhost/guestbook/index/index/
http://localhost/forum/index/index/

O que não entendo é como configurar um Papel rota que será a base para todas as rotas.No ZF1 eu usei Encadeamento de Rota Para alcançar isto..

Então preciso configurar um Papel rota de /[:lang[/:locale]] que se aplica a todo o site e depois deixa o módulo configurar /[:namespace[/:controller[/:action]]] ou qualquer outra rota necessária.

http://localhost/en/us/application/index/index/
http://localhost/zh/cn/application/index/index/
http://localhost/en/uk/forum/index/index/
Foi útil?

Solução

Acho que o que você está procurando é o child_routes chave de configuração.Dê uma olhada em como ZfcUser configura seu roteamento (aqui):ele cria uma rota literal base (/user) e então encadeia as sub-rotas (/user/login, etc) nela através do child_routes variedade.

Acho que algo assim resolverá o problema para você:

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

Então, no seu controlador, você poderia fazer isso para obter o idioma e o local:

$this->params()->fromRoute('lang');
$this->params()->fromRoute('locale');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top