2010-12-31 4 views
5

저는 Zend Framework 초보자입니다. 내 application.ini 파일에 다른 경로를 추가하는 방법을 알아 내려고하고 있습니다.Zend Framework에서 application.ini의 경로 설정

나는 현재 다음과 같이 내 경로가 설정 한 :

resources.router.routes.artists.route = /artists/:stub 
resources.router.routes.artists.defaults.controller = artists 
resources.router.routes.artists.defaults.action = display 

을 ... /아티스트/조 - Bloggs에 프로파일을 dipslay하는 컨트롤러 "예술가"의 "디스플레이"동작을 사용할 수 있도록 문제의 예술가 - 잘 작동합니다.

내가 지금하고 싶은 일은 /artists/joe-bloggs/random-gallery-name이 "아티스트"컨트롤러의 "갤러리"작업으로 이동하도록 다른 경로를 설정하는 것입니다.

내가 지금처럼 (위의 블록 아래)에 application.ini 파일에 추가 블록을 추가하는 시도

:

resources.router.routes.artists.route = /artists/:stub/:gallery 
resources.router.routes.artists.defaults.controller = artists 
resources.router.routes.artists.defaults.action = galleries 

...하지만 난 할 때 /아티스트/조 - Bloggs에의 페이지은 더 이상 작동하지 않습니다 (Zend는 "joe-bloggs"컨트롤러로 라우팅하려고합니다).

"/ : gallery"의 존재 여부에 따라 "아티스트"컨트롤러의 동작을 변경할 수 있도록 application.ini에서 경로를 어떻게 설정합니까?

나는 아마도 내가 어리석은 실수를 저지르고 있다는 것을 알고있다. 그래서 나의 어리 석음을 지적하고 올바른 길 (나에게 말장난이 없다)에 나를 고정 시켜라.

답변

4

경로의 순서를 바꾸어보십시오. ZF는 추가 된 순서대로 경로를 찾습니다 (기본 경로가 마지막으로 일치하도록)

그래도 작동하지 않으면 옵션 구성 요소를 사용하여 정규식 경로를 조사해야 할 것입니다. 나는 일반적으로 설치 응용 프로그램/Bootstrap.php 내 경로

1

는 아래와 같은 방법을 추가 (또는 Bootstrap.php 파일은 어디든지) : 날씨을 확인 마찬가지로 지금까지

protected function _initRoutes() 
{ 
    $ctrl = Zend_Controller_Front::getInstance(); 
    $router = $ctrl->getRouter(); 
    $router->addRoute(
      'artist_detail', 
      new Zend_Controller_Router_Route('artists/:stub', 
              array('controller' => 'artists', 
                'action' => 'display')) 
    ); 

    $router->addRoute(
      'artist_detail_gallery', 
      new Zend_Controller_Router_Route('artists/:stub/:gallery', 
              array('controller' => 'artists', 
                'action' => 'gallery')) 
    ); 



} 

,536 : 특정 작가가 내 예제의 경우, 갤러리를 가지고, 나는 갤러리가 '그루터기'요청 paramater이있는 경우는 404을 던져 나던 경우

이 검사를 수행 ArtistsController에 galleryAction 방법을 것이다

throw new Zend_Controller_Action_Exception("Object does not exist", 404); 

또는 다른 페이지로 리디렉션 :이 도움이

return $this->_helper->redirector('index', 'index'); //redirect to index action of index controller 

희망을.

+0

, 그것은 훨씬 더 자세한입니다 application.ini에 넣는 것보다 이해하기 쉽다. – jolyonruss

+1

@jolyonruss 다른 한편으로 나는 그렇지 않다. –

3

두 번째 블록이 다른 경로 이름이 새 블록이 비슷한에 '예술가'단어의 이름을 바꿀 필요가있다 : 나는 라우팅 솔루션으로이 선호

resources.router.routes.artists-gal.route = /artists/:stub/:gallery 
resources.router.routes.artists-gal.defaults.controller = artists 
resources.router.routes.artists-gal.defaults.action = galleries 
관련 문제