2013-03-07 1 views
0

내 사이트에서는 프로젝트를 만들 수 있으며 프로젝트 템플릿과 같은 여러 프로젝트 유형이 있습니다.젠드 프레임 워크 동적 액션 이름 라우팅

내가 원하는 것은 모든 프로젝트 유형을 처리하는 하나의 작업을하는 것입니다. 현재 각 프로젝트 유형별로 별도의 작업과보기가 있습니다. 나는 그들 모두를 하나의 단일 행동으로 보내고 싶다.

여기까지 내가 지금까지 생각해 냈지만 작동하지 않습니다.

resources.router.routes.new_project.route = "/project/new-:id" 
resources.router.routes.new_project.defaults.controller = "project" 
resources.router.routes.new_project.defaults.module = "site" 
resources.router.routes.new_project.defaults.action = "new" 
resources.router.routes.new_project.reqs.id = "([0-9]+)" 

그래서 내 URL이 1, 2 프로젝트 형식 ID는 http://mysite.com/project/new-1 또는 http://mysite.com/project/new-2처럼보고 싶어. 이 두 URL은 project 컨트롤러에서 new이라는 작업에 매핑되어야합니다.

ZF 1.11에서 이렇게 할 수 있습니까?

답변

2

원하는 URL 형식은 쉽게 정규 표현식 경로를 달성 할 수 있습니다

resources.router.routes.new_project.type = "Zend_Controller_Router_Route_Regex" 
resources.router.routes.new_project.route = "project/new-(\d+)" 
resources.router.routes.new_project.defaults.controller = "project" 
resources.router.routes.new_project.defaults.module = "site" 
resources.router.routes.new_project.defaults.action = "new" 
resources.router.routes.new_project.map.1 = "project_type_id" 
resources.router.routes.new_project.reverse = "project/new-%s" 

그런 다음 컨트롤러 $this->_getParam('project_type_id')를 사용하여 ID에 액세스 할 수 있습니다.

+0

* 거의 * 나는 무엇을 생각해 냈습니다. 이것은 나를 위해 작동하지 않았다 그래서'new_project.route'에서 나는 처음 슬래쉬를 제거하고'^ project/new - (\ d +)'로 끝났다. –

+0

네, 네 말이 맞아. 내 대답에서 그걸 제거 했어. ZF는 실제로 경로 일치를 수행하기 전에 그것들을 제거하지만, 조립 된 경로에서 이중 슬래시로 끝났을 수 있습니다. –

1

URL 변수를 부분으로 지정할 수없는 것처럼 보입니다. 전체 세그먼트 (세그먼트가 /으로 구분 된 경우)를 차지해야합니다. 즉, 첫 번째 문자는 :이어야하며 그 다음 나머지는 이름입니다. 값의.

참조 Zend/Controller/Router/Route.php (라인 158..196)의 기능 __construct - 그것은 단지 확인 substr($part, 0, 1): 일치하는 경우, (가 아닌 세그먼트 내에서 어디서나 찾고). 당신은 잠재적으로 /project/new-(\d+) 같은 URL을 사용자에게 제공하지만 젠드에 대한 /project/new/$1에 다시이 아파치에 mod_rewrite를 사용할 수 있습니다 -


나는이 같은 조치를 사용하는 젠드에서 /project/new/:id을 사용해야합니다 의미합니다 생각합니다.

+0

+1은 작동하는 솔루션처럼 보입니다. Zend의'application.ini' 파일에서 저에게 맞는 것을 발견했습니다. 나중에 게시 할 예정입니다. 고맙습니다! –