5

Ich bin neu in Zend Framework 3 und versuchte, die Routen zu übersetzen, und ich habe teilweise erfolgreich.Ich bin in der Lage, die Hauptroute zu übersetzen und es an den gewünschten Ort, sondern für child routet die Übersetzung, die Umleitung jedoch nicht. kannst du mir bitte helfen, mein Code ist unten.Zend Framework nicht in der Lage, die übersetzten Kind Routen zu routen

module.config.php

'router' => [ 
     'router_class'   => TranslatorAwareTreeRouteStack::class, 
     'routes' => [ 
      'setting' => [ 
       'type' => Segment::class, 
       'options' => [ 
        'route' => '/{locale}/{setting}', 

        'defaults' => [ 
         'locale'  => 'de', 
         'controller' => Controller\SettingController::class, 
         'action'  => 'index', 
        ], 
       ], 

       'may_terminate'=>true, 
       'child_routes' =>[ 
         'add' =>[ 
          'type'  =>'Segment', 
          'options' =>[ 
           'route'   =>'/{add}', 
           'defaults'=> [ 
            'controller' => Controller\SettingController::class, 
            'action'  => 'add', 
           ], 
          ], 
         ], 
       ], 
      ], 
     ], 
    ], 

module.php

public function onBootstrap(MvcEvent $e) 
    { 
     $eventManager  = $e->getApplication()->getEventManager(); 
     $moduleRouteListener = new ModuleRouteListener(); 
     $moduleRouteListener->attach($eventManager); 

     $language_session = new Container('language'); 

     if(!$language_session->offsetExists('lang')){ 

      $language = 'de_DE'; 

     } else{ 

      $language = $language_session->lang.'_'.strtoupper($language_session->lang); 
     } 

     $translator = $e->getApplication()->getServiceManager()->get('translator'); 
     $translator->setLocale($language); 
     $translator->addTranslationFile('phparray', __DIR__.'/language/'.$language.'.php', 'default',$language); 

     $app  = $e->getTarget(); 
     $app->getEventManager()->attach('route', array($this, 'onPreRoute'), 100); 
    } 

    public function onPreRoute($e) 
    { 
     $app  = $e->getTarget(); 
     $serviceManager  = $app->getServiceManager(); 
     $serviceManager->get('router')->setTranslator($serviceManager->get('translator')); 
    } 

Und meine Sprachdatei de_De.php

return array(
    'locale' => 'de', 
    'setting' => 'Einstellung', 
    'add'  => 'hinzufügen', 
); 

Wie pro meine obigen Code i bin in der Lage zu umleiten zu Settings Controller mit der Route "language.devgrafioffshore.com/de/Einstellung "

aber nicht in der Lage zu language.devgrafioffshore.com/de/Einstellung/hinzufügen zu umleiten, die mich Aktion hinzuzufügen umleiten sollte, aber ich bekommen

Die angeforderte URL nicht durch das Routing angepasst werden könnten.

Vielen Dank im Voraus. Tschüss!

+1

Laut Dokumentation und was wir auf SO (einige Code sind genau das gleiche) finden, scheint es OK. Hast du herausgefunden, was falsch war, seit du diese Frage gestellt hast? –

+0

@AlFonce ja ich fand eine sache, die "hinzufügt" nicht funktioniert aber "hinzufugen" funktioniert und wenn du einen besseren weg gefunden hast die url übersetzung zu lösen als lass mich es wissen. Vielen Dank!! – khukuri

Antwort

0

ich Ihren Code in zend framework2 neu geschrieben haben, werfen Sie einen Blick, werde ich versuchen,

'router' => array(
    'routes' => array(
     'setting' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/setting', 
       'defaults' => array(
        '__NAMESPACE__' => '<<MODULE NAME HERE>>\Controller', 
        'controller' => 'SettingController', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'add' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/add[/:action[/:id]]', 
         'constraints' => array(
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*' 
         ), 
        ), 
       ), 

      ) 

     ), 
    ), 

Die möglichen Routen durch diese Konfiguration

expalin sind

Einstellung/hinzufügen/anyActionName

Einstellung/add/

Einstellung hinzufügen/add/test

Das erste Add ist keine Handlung, vielmehr wirkt es als Weg zum Handeln. Der zweite "add" oder "anyActionName" sind die Aktionen, die Sie ausführen möchten. Eine viel bessere Sache mit dieser Konfiguration ist, dass Sie IDs auch mit Aktionsname über URL übergeben können, aber wenn Sie keine ID übergeben, ist es in Ordnung.

Eine weitere sehr wichtige Sache, definiert Konfiguration auf diese Weise jede Aktion Name nicht zu definieren hilft, weil mit

'constraints' => array(
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*' 
         ), 

diese Einschränkung auf Aktionsnamen, jede Aktion Namen übergeben könnte, es sei denn, der Aktionsname enthält ein beliebiges Sonderzeichen Wenn Sie Fragen zu meiner Lösung haben, zögern Sie nicht zu fragen.

Verwandte Themen