5

젠드 프레임 워크 3을 처음 사용하고 경로를 번역하려고했는데 부분적으로 성공했습니다. 주요 경로를 번역하고 필요한 위치로 리디렉션 할 수 있지만 자식 경로는 번역이 작동하지만 리디렉션은 작동하지 않습니다. 제발 도와주세요, 제 코드는 아래에 있습니다.젠드 프레임 워크가 번역 된 하위 경로를 라우팅 할 수 없습니다.

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')); 
    } 

그리고 내 언어 파일 de_De.php

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

내 위의 코드에 따라 경찰 난 리디렉션 할 수 있어요 설정 컨트롤러에 "language.devgrafioffshore.com/de/Einstellung "조치를 추가하는 저를 리디렉션하지만 난

요청 된 URL

을 받아야하는 language.devgrafioffshore.com/de/Einstellung/hinzufügen로 리디렉션 할 수

하지만은 라우팅과 일치 할 수 없습니다.

미리 감사드립니다. 안녕!

+1

설명서에 따르면 우리가 찾을 수있는 것은 (일부 코드는 정확히 동일합니다), 괜찮아 보입니다. 이 질문을 올린 후 잘못 된 것을 발견 했습니까? –

+0

@AlFonce 예 "hinzufügen"이 작동하지 않지만 "hinzufugen"이 작동하고 URL 번역을 해결할 수있는 더 나은 방법을 찾았 으면 알려주세요. 감사!! – khukuri

답변

0
내가 젠드 framework2에서 코드를 다시 한

, 봐, 난이 구성을 통해 가능한 경로

'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_-]*' 
         ), 
        ), 
       ), 

      ) 

     ), 
    ), 

있습니다 expalin하려고합니다 설정/추가/모든 액션 이름

/설정 부가 제 액션 아니다/시험

추가/

설정을 추가/추가 오히려 동작 경로로서 작용한다. 두 번째 "add"또는 "anyActionName"은 실행하려는 작업입니다. 이 설정의 훨씬 더 좋은 점은 URL을 통해 액션 이름이있는 ID도 전달할 수 있지만 ID를 전달하지 않으면 괜찮습니다.

한 가지 더 중요한 것은, 구성 작업 이름에

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

이 제약 조건, 어떤 액션 이름을 통과 할 수 있기 때문에이 방법은 모든 액션 이름을 정의하지 않는 데 도움이 정의 된 액션 이름하지 않는 한 특수 문자가 포함되어 있습니다. 내 솔루션에 관한 질문이 있으시면 언제든지 물어보십시오.