Zend Framework 2 - Zend\Mvc outer\Http\Part - Configuração do módulo
-
12-12-2019 - |
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/
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');