2014-04-24 4 views
3

ZF2에서 모듈 라우팅을 고민하고 있습니다.ZF2 - 젠드 프레임 워크 2, 라우팅 이해

지금은 단일 액션에 대해 단일 컨트롤러 만 만들 수 있으며이 라우팅을 파악하는 데 어려움을 겪고 있습니다. 나는 다른 모듈과 플러그인을 살펴 보았고, 그것을 얻으려면 약간의 노력 만하면된다. 이 나는 두 가지 작업에 경로에 노력하고 예에서

: indexAction 및 cmstoolsAction는

기본적으로 사용자는 탐색에 :

/affiliates/overview 
/affiliates/cmstools 

그리고 오류는 다음과 같습니다

The requested URL could not be matched by routing. 

I 내가 고심하고있는 곳에서 MVC가 작동하는 방식을 먼저 이해하고 세부 사항에서 길을 잃고 있는지 생각합니다. 설명서에 너무 많은 정보가있어 약간 압도적 인 것입니다.

어쨌든 - 입력에 크게 감사드립니다! 모듈 구조의

이미지 :

Affiliate module

내 컨트롤러는 다음과 같습니다

<?php 
namespace Affiliates\Controller; 
use Zend\Mvc\Controller\AbstractActionController; 

class AffiliatesController extends AbstractActionController 
{ 
    //Overview page 
    public function IndexAction() 
    { 

    } 

    public function CmstoolsAction() 
    { 

    } 


} 

그리고 내 모듈 설정은 다음과 같습니다

<?php 
return array(
'view_manager' => array(
    'template_path_stack' => array(
     'affiliates' => __DIR__ . '/../view', 
    ), 
), 
'controllers' => array(
    'invokables' => array(
     'Affiliates\Controller\Affiliates' => 
     'Affiliates\Controller\AffiliatesController' 
    ), 
), 
'router' => array(
    'routes' => array(
     'affiliates' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/overview', 
       'defaults' => array(
        'controller' => 'Affiliates', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'cmstools' => array(
        'type' => 'Literal', 
        'options' => array(
         'route' => '/cmstools', 
         'defaults' => array(
          'controller' => 'Affiliates', 
          'action'  => 'cmstools', 
         ), 
        ), 
       ), 

      ), 
     ), 

    ), 

), 

); 
+0

참고 폴더 트리에서 하나의 작은 실수. view 디렉토리를 다음과 같이 업데이트했습니다 : view/affiliates/affiliates/ – HappyCoder

답변

2

라우팅 설정 여기서 유일하게 중요한 부분입니다. 현재 /overview에 대한 경로가 있으며 여기에는 /cmstool에 대한 하위 경로가 있습니다. 이 URL은 다음 URL과 일치합니다.

/overview 
/overview/cmstool 

네가 뭘했는지 알 수 없네.

구성 방법에는 여러 가지가 있습니다. 현재 갖고있는 것과 가장 가까운 경로는 두 개의 하위 경로가있는 /affiliates의 경로가되며 각 경로는 하나씩 사용됩니다. 이에 대한 구성은 다음과 같습니다 affiliates, overviewcmstools :

'router' => array(
    'routes' => array(
     'affiliates' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/affiliates', 
       'defaults' => array(
        'controller' => 'Affiliates', 
        'action'  => 'index', 
       ), 
      ), 
      'child_routes' => array(
       'overview' => array(
        'type' => 'Literal', 
        'options' => array(
         'route' => '/overview', 
         'defaults' => array(
          'controller' => 'Affiliates', 
          'action'  => 'index', 
         ), 
        ), 
       ), 
       'cmstools' => array(
        'type' => 'Literal', 
        'options' => array(
         'route' => '/cmstools', 
         'defaults' => array(
          'controller' => 'Affiliates', 
          'action'  => 'cmstools', 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

이 구성은 세 가지 경로가 포함되어 있습니다. 후자의 두 가지는 모두 계열사의 하위 경로입니다. 계열사 경로에서 'may_terminate' => true, 행을 삭제했음을 유의하십시오. 이는 제휴사 루트가 자체적으로 일치하는지 (즉, /affiliates이 작동하는지 여부)를 결정합니다. 당신이 이것을 열거하지 않았으므로 당신이 원하지 않는다고 가정합니다. 당신이 구성 할 수

또 다른 방법은 단순히 두 개의 문자 경로를 작성하면 각 URL에 대한 (모든 하위 경로를 사용하지 않는)하는 것입니다 :

'router' => array(
    'routes' => array(
     'overview' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/affiliates/overview', 
       'defaults' => array(
        'controller' => 'Affiliates', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'cmstools' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/affiliates/cmstools', 
       'defaults' => array(
        'controller' => 'Affiliates', 
        'action'  => 'cmstools', 
       ), 
      ), 
     ), 
    ), 
), 
+0

"controller"=> "affiliates"=> 'controller'=> 'Affiliates/Controller/AffiliatesController'로 업데이 트되었습니다. 귀하의 의견을 보내 주셔서 감사합니다! – HappyCoder

+0

아, 그래.'컨트롤러'키는 모듈 설정의 컨트롤러 - 라인 10에 설정 한 별칭과 일치해야합니다. 그래서'Affiliates' 대신'Affiliates \ Controller \ Affiliates' 여야합니다 –

+0

고마워요! 오늘 좋은 학습 곡선! – HappyCoder