2014-01-29 2 views
0

그래서 User라는 이름의 모듈이 있고이 모듈 안에 일부 컨트롤러가 있습니다. 이제 로그 아웃 컨트롤러가 있는데 url (domain.tld/user/logout)을 만들고 싶습니다. 내 견해에있어이 관제사에게. 나는이 같은 시도 : 정의 된 경로가없는 ZF2 url보기 도우미

$this->url("user/logout"); //This doesn't work since there isn't a child route defined for the user 

그래서 내 질문은

module.config.php

의 경로를 정의없이 URL보기 도우미를 사용하여 URL을 정의 할 수있는 옵션이있다 :

$this->url("user",array("controller" => "logout")); //This doesn't work 

나는이 같은 시도 여기

유엔에 module.config.php

return array(
    'router' => array(
     'routes' => array(
      'register' => array(
       'type' => 'Zend\Mvc\Router\Http\Literal', 
       'options' => array(
        'route' => '/user', 
        'defaults' => array(
         'controller' => 'User\Controller\Index', 
         'action' => 'index', 
        ), 
       ), 
      ), 
      'user' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => '/user', 
        'defaults' => array(
         '__NAMESPACE__' => 'User\Controller', 
         'controller' => 'Index', 
         'action' => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'default' => array(
         'type' => '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(
          ), 
         ), 
        ), 

답변

3

시도 내의 조각입니다 라우팅이하는 일을 이해합니다. 액세스하려는 child_routedefault입니다. 할당 된 defaults가 없습니다으로 인해, 기본 경로는 당신은 또한 controlleraction에 필요한 매개 변수를 선언해야, 그러나

$this->url('user/default'); 

수 있습니다. 도

$this->url('user/default', array('controller' => 'Foo', 'action' => 'Bar')); 

당신이 user/default 경로를 정의하는 방법은 정말 좋지 않다 : 경로를 의미하는 것은 그런 일을보고있다. $this->url('user/default')의 첫 번째 예는 라우터에 유효한 URL이지만 실제로 누락 된 매개 변수로 인해 controller이 실패 할 가능성이 높은 URL 인 domain.com/user/을 실제로 생성합니다. 본질적으로 나는 컨트롤러 부분을 선택 사항이 아니라 단지 동작으로 만들고 기본 동작을 정의하도록 제안합니다. 이처럼

'route' => '/:controller[/:action]' 
'defaults' => array(
    'action' => 'index' 
) 

는 들어오는 모든 요청은 항상 특정 컨트롤러를 일치하도록 보장하며 indexAction()있어 될 것이다. 당연히이 경로를 사용하는 모든 컨트롤러에 대해서만이 작업을 사용하는 것을 고려해야합니다.

+0

와우, 훌륭한 지식, 정말로 고맙습니다, 고맙습니다! – Uffo

관련 문제