ZF2: Übersetzbare Routen

Seit Version 2.3 bietet das Zend Framework die Möglichkeit Segment Routen zu übersetzen. Daher eine kurze Anleitung wie man diese nutzt.

Zu allererst will ich gleich erwähnen, das dies (bisher) nur mit festen Segment Routen funktioniert, variable Segmente werden aktuell leider noch nicht von Hause aus unterstützt.

Als erstes müssen wir einen neuen TreeRouteStack definieren, dazu legen wir in der Konfiguration der Routen folgendes fest:

// Router Konfiguration
return array(
    'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',
    'routes' => array(
        ...
    ),
);

Jetzt müssen wir dem Route noch unsere Translation Klasse übergeben, dazu habe ich in der onBootstrap-Funktion folgendes hinzugefügt:

// Module.php
// onBootstrap()
$serviceManager = $e->getTarget()->getServiceManager();
$router = $serviceManager->get('router');
$router->setTranslator($serviceManager->get('translator'), 'routing');

Als letzten Schritt noch dem Translator sagen, wo die Übersetzungsdateien zu finden sind:

// module.config.php
    'translator' => array(
        'locale' => 'de_DE',
        'translation_file_patterns' => array(
            array(
                'type'     => 'phparray',
                'base_dir' => __DIR__ . '/../languages/routing',
                'pattern'  => '%s.php',
                'text_domain' => 'routing'
            ),
        ),
    ),

Und schon ist die übersetzbare Route einsatzbereit.

Um das ganze etwas zu verdeutlichen legen wir jetzt eine neue Segment-Route zum übersetzen an:

return array(
    'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',
    'routes' => array(
        'partner' => array(
            'type'    => 'Segment',
            'options' => array(
                'route'    => '/{test}',
                'defaults' => array(
                    'controller' => 'Test\Controller\Index',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
);

Die übersetzbaren Routen werden in geschweiften Klammen eingeschlossen {test}.

Wenn wir nur per URL-ViewHelper unsere Route zusammenbauen lassen wird diese korrekt ins Deutsche übersetzt und beim Aufruf wird auch korrekt der Controller aufgerufen. Natürlich müssen wir dafür auch die jeweilige Übersetzung in unsere Übersetzungsdatei einfügen.

Hier noch der Pull Request zu den übersetzbaren Routen mit weiteren Infos:

Pull Request zu übersetzbaren Routen auf github.com

Achtung: in der Version 2.3.0 vom Zend Framework gibt es noch ein Bug, da die Segment route eine falsche Translation Klasse nutzt. Daher funktionieren die übersetzbaren Routen erst korrekt ab 2.3.1.

Kommentar verfassen