Frage

Ich erstelle eine mehrsprachige Anwendung mit ZF2.und kann nicht bestimmen, wie eine Teil-URL hinzugefügt wird, die unabhängig von den Modulen die Basis jeder URL bildet.

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

Ich verstehe vollkommen, wie man konfiguriert /[:namespace[/:controller[/:action]]] mit DI

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

Was ich nicht verstehe ist, wie man a konfiguriert Teil Route, die die Basis für alle Routen sein wird.In ZF1 habe ich verwendet Routenverkettung um das zu erreichen..

Also muss ich a konfigurieren Teil Route von /[:lang[/:locale]] Dies gilt für die gesamte Site und lässt dann das Modul konfigurieren /[:namespace[/:controller[/:action]]] oder jede andere notwendige Route.

http://localhost/en/us/application/index/index/
http://localhost/zh/cn/application/index/index/
http://localhost/en/uk/forum/index/index/
War es hilfreich?

Lösung

Ich denke, was Sie suchen, ist das child_routes Konfigurationsschlüssel.Schauen Sie sich an, wie ZfcUser konfiguriert sein Routing (hier):Es erstellt eine Basis-Literal-Route (/user) und verkettet dann die Unterrouten (/user/login usw.) über die child_routes Array.

Ich denke, so etwas wird für Sie den Zweck erfüllen:

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

Dann könnten Sie in Ihrem Controller Folgendes tun, um die Sprache und das Gebietsschema abzurufen:

$this->params()->fromRoute('lang');
$this->params()->fromRoute('locale');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top