문제

내 웹 사이트에 Zend Framework를 사용하고 있으며 API를 만들기 위해 특별 모듈 "API"를 만들었습니다.

이제 모듈에 많은 컨트롤러가 있으며이 컨트롤러 디렉토리에 "깔끔한"을 만들기 위해 하위 디렉토리를 만들고 싶습니다. 내 새로운 구조는 다음과 같습니다.

 - controllers/
 - controllers/contents/[controllers]
 - controllers/users/[controllers]
 - controllers/misc/[controllers]

그러나 zend_controller_router_route를 사용하여 어떤 종류의 URL과 리디렉션이 이러한 컨트롤러에 매핑 될 수 있는지 완전히 찾을 수 없습니다. 어떻게 든이 작업을 수행 할 수 있습니까? 아니면 정상 구조로 돌아가서 모든 컨트롤러를 동일한 디렉토리에 넣어야합니까?


Smack0007에서 제안한대로 분리기 _을 사용하려고 시도했으며 Zend 프레임 워크가 일반적으로 하위 디렉터를 참조하는 방법을 고려할 때 논리적으로 보였지만 오류가 발생했습니다.


편집 : PROPRE 케이스를 사용하지 않았기 때문에 문제와 관련이 없었기 때문에 긴 오류 텍스트를 제거했습니다. 디렉토리의 첫 글자에 대문자를 넣어야한다고 믿었습니다. 이제 모두 잘 작동합니다.

도움이 되었습니까?

해결책

1.5 버전에서 프로젝트 에서이 작업을 수행했지만 더 이상 작동하는지 모르겠습니다.

컨트롤러를 "{폴더} _"로 접두사 한 다음 URL에서 전체 이름을 사용해야합니다.

따라서 귀하의 경우에는 다음과 같은 컨트롤러가 있습니다.

contents_FooController

그리고 경로 :

/contents_foo/index

다른 팁

이전 응용 프로그램을 위해 URL에서 여러 레벨을 달성하고 많은 URL Roules를 사용하지 않으려 고 노력했습니다. 그래서 나는 컨트롤러를 하위 디렉터로 그룹화하고 URL 라우를 정의하는 것에 대해 생각했습니다.

구조를 위해

modules
 --test
   --controllers
     --sub
        -- OtherController.php
     --DefaultController.php

모듈의 bootstrap.php에서 다음을 추가했습니다.

public function __construct($application)
    {
        parent::__construct($application);
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->addControllerDirectory(__DIR__ . '/controllers',
            'test');
        $frontController->addControllerDirectory(__DIR__ . '/controllers/sub',
            'test_sub');
    }

DefaultController.php는

class Test_DefaultController extends Zend_Controller_Action {
     public function subAction()
    {
         $level1 = $this->getRequest()->getParam('level1');
         $level2 = $this->getRequest()->getParam('level2');
         return $this->_forward($level2, $level1, 'test_sub');
    }

따라서 하위 디렉토리의 컨트롤러로 전달됩니다.

마지막으로 경로를 추가했습니다.

new Zend_Controller_Router_Route_Regex('([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)',
    array(),
    array(1 => 'module', 2 => 'controller', 3 => 'action', 4 => 'level1', 5 => 'level2'),
    '%s/%s/%s/%s/%s'
)

이제 요청 테스트/기본/서브/기타/색인을 사용하면 OtherController.php에서 indexaction을 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top