2010-03-09 3 views
1

내 IndexController에서 현재 indexAction (homepage), loginAction 및 logoutAction이 있습니다. domain.com/index/login 대신 domain.com/login을 얻기 위해 URL에서 "/ index /"를 제거하려고합니다.Zend_Controller_Router_Route를 사용하여 IndexController에서 작업에 대한 친숙한 URL 만들기

이것을 달성하는 가장 깨끗한 방법은 무엇입니까? 우리가 사용할 수있는 RegEx가 있습니까? URL에/index /를 원하지 않습니다.

내가 개선 할 수 있다고 생각하는 현재의 솔루션은 다음과 같습니다. 또한 addRoute()의 첫 번째 매개 변수는 무엇을합니까?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initViewHelpers() 
    { 
    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 
    $router->addRoute('login', 
     new Zend_Controller_Router_Route('login/*', array(
     'controller' => 'index', 
     'action'  => 'login' 
    )) 
    ); 
    $router->addRoute('logout', 
     new Zend_Controller_Router_Route('logout/*', array(
     'controller' => 'index', 
     'action'  => 'logout' 
    )) 
    ); 
    } 
} 

답변

2

모든 행동을위한 경로를 만들어야합니다. 이렇게하면 코드를 수정하지 않고도 경로 기본값 (모듈/컨트롤러/동작)을 변경할 수 있습니다.

<a href="<?php echo $this->url(array(), 'login', true); ?>">Login</a> 

업데이트 :

첫 번째 매개 변수는 귀하의 의견에 URL을() 도우미와 함께 사용해야하는 경로 이름입니다. 내가 Zend_Navigation을 사용하고 있기 때문에하는 링크를 관리 할 수 ​​있음을 사용할 수 없습니다

$router->addRoute('default', 
    new Zend_Controller_Router_Route(':action/*', array(
    'controller' => 'index', 
)) 
); 
+0

: 당신이 URL에 "인덱스"없이 오직 하나의 경로를 원하는 경우, 같은 경로를 사용할 수 있습니다. RegEx를 사용하여 addRoute()를 한 번만 사용해야하는 방법을 찾고 있습니다. – jwhat

+0

답변을 업데이트했습니다. 왜 Zend_Navigation의 문제점은 무엇입니까? –

+0

고마워요! 그것은 제외하고 일했다. addRoute()에 대한 첫 번째 매개 변수를 'default'에서 'index'로 변경해야했다. 그렇지 않으면 내 URL이 domain.com/index/controller/login으로 끝났다. Zend_Navigation에는 아무런 문제가 없습니다. 하이퍼 링크를 직접 만들지 않고, $ this-> navigation() -> menu(); 내 레이아웃에서. – jwhat

관련 문제