2016-08-14 2 views
2
정말 정상이며 모든 사람이 표준 라우팅 규칙으로 제시 Zend2에서 내 응용 프로그램 모듈 설정 등이 설정 사용하고

:Zend2 라우팅 __NAMESPACE__가 작동하지 않거나 무시

'controllers' => array(
    'invokables' => array(
     'Application\Controller\Index' => 'Application\Controller\IndexController', 
    ), 
), 
'router'  => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'application' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Zend\Mvc\Router\Http\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(
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

라우팅를 들어 home 잘 작동합니다. 하지만 http://localhost/application 내가 얻을 :

http://localhost/application/index/index 내가 얻을 :

지수 (잘못된 컨트롤러 클래스 나에 해결합니다

인덱스 (색인 무효 컨트롤러 클래스 또는 별칭으로 확인) 별칭 : 색인)

이에
'application' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 

:

'application' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 

당신은 내가 이것을 사용하는 경우가 home URL

처럼 잘 작동합니다 http://localhost/application에 대해 확실히 알다시피 :

'controllers' => array(
    'invokables' => array(
     'index' => 'Application\Controller\IndexController', 
    ), 
), 

당신은 구성을 알고 병합 될 것이고 프로젝트에 인덱스 컨트롤러가 하나만 있어야합니다.

왜 줄을 '__NAMESPACE__' => 'Application\Controller', 무시하고 컨트롤러 배열에서 색인이나 색인을 찾습니다.

편집 : Application/Module.php이 추가 다른 프로젝트에 비해으로

:

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

와 지금 작동하지만 내가 필요하고 설명. 그것은 해결책인가? 나는 프로젝트의 Module.php 파일 중 하나에 이것을 추가하여 라우팅 규칙을 올바르게 작성해야합니까? 왜 없으면 라우팅 규칙에서 __NAMESPACE__이 무시 될까요?

답변

1

이미 솔루션을 찾았으므로 ModuleRouteListener을 추가하는 것이 옳은 일입니다. 설명은 the description of the onRoute method inside this listener에서 찾을 수 있습니다.

"route"이벤트를 듣고 모듈 네임 스페이스를 컨트롤러 이름 앞에 붙여야하는지 확인하십시오.

경로 일치에 MODULE_NAMESPACE 상수와 일치하는 매개 변수 키가 포함되어 있으면 해당 값이 네임 스페이스 구분 기호와 함께 일치하는 컨트롤러 매개 변수 앞에 추가됩니다.

+0

Thx이므로 ModuleRouteListener를 사용하지 않고 __NAMESPACE__을 (를) 확인하지 않으시겠습니까? –

+0

@ S.Gholizadeh 정확히 – Wilt

관련 문제