Pregunta

Estoy creando una aplicación multilingüe usando ZF2.y no puedo determinar cómo agregar una URL parcial que formará la base de cada URL independientemente de los módulos.

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

Entiendo totalmente cómo configurar /[:namespace[/:controller[/:action]]] usando DI

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

Lo que no entiendo es como configurar un Parte ruta que será la base para todas las rutas..En ZF1 usé Encadenamiento de rutas lograr esto..

Entonces necesito configurar un Parte ruta de /[:lang[/:locale]] que se aplica en todo el sitio y luego deja que el módulo se configure /[:namespace[/:controller[/:action]]] o cualquier otra ruta necesaria..

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

Solución

Creo que lo que buscas es el child_routes clave de configuración.Echa un vistazo a cómo ZfcUser configura su enrutamiento (aquí):crea una ruta literal base (/usuario) y luego encadena las subrutas (/usuario/login, etc.) en ella a través de child_routes formación.

Creo que algo como esto te servirá:

'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',
                    ),
                ),
            ),
        ),
    ),
),

Luego, en tu controlador puedes hacer esto para obtener el idioma y la configuración regional:

$this->params()->fromRoute('lang');
$this->params()->fromRoute('locale');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top