2012-05-31 3 views
1

MVC 애플리케이션에 Zend Framework를 사용하고 있습니다.Zend Framework : 뷰 baseUrl()은 빈 문자열을 반환하고 컨트롤의 getRequest() -> getBaseUrl()은 정상적으로 작동합니다.

뷰에서 기본 URL이 필요한 경우 항상 "" (빈 문자열)을 반환합니다. 내 컨트롤러에서 $this->getRequest()->getBaseUrl()을 사용하면 올바른 기본 URL을 반환합니다.

예를 들어, index.dev.php (개발은 index.php)을 통해 개발 응용 프로그램 환경을 사용합니다. 프로덕션에서는 모든 URL이 ""으로 baseUrl로 시작되지만 개발 환경에서는 index.dev.php를 사용하여 모든 URL이 "/index.dev.php"으로 시작될 것으로 기대합니다.

앞서 말한 것처럼 뷰의 baseUrl() 도우미는 개발 환경에서도 빈 문자열을 반환합니다. 그러나 동일한 환경에서 $this->getRequest()->getBaseUrl()을 사용하면 올바른 기본 URL을 반환합니다.

이 문제를 해결하기 위해 모든 내보기의 $this->baseUrl() 호출을 $this->baseUrl으로 변경했으며이보기 변수를 사용자 지정 기본 컨트롤러 클래스에 정의했습니다. 그러나 이것은 내가 예상하는 해결책이 아닙니다.

이 모듈 응용 프로그램입니다, 내가 경로를 사용하고는, 다음과 같이 부트 스트랩 시간에 추가 :

protected function _initRoutes(){ 

    $objFrontController = Zend_Controller_Front::getInstance(); 
    $objRouter = $objFrontController->getRouter(); 

    $arrAppRoutes = Service_Route::getAllActiveApplicationRoutes(); 

    if(is_array($arrAppRoutes) && count($arrAppRoutes) > 0){ 

     $objRouter->addRoutes($arrAppRoutes); 

     // Add the default routes in the end 
     $objRouter->addDefaultRoutes(); 
    } 
} 

이 루트 Zend_Controller_Router_Route 클래스의 모든 인스턴스가 있으며,이 같은 뷰에서 사용할 경우 : $this->url(array(), 'admin_dashboard');이면 baseUrl은 항상 정확합니다 (baseUrl var 솔루션을 사용하기 전에도).

누군가가이 사실을 알고 있다면 도와주세요. 내 응용 프로그램 설정에 대한 추가 정보가 필요하면 가능한 한 많이 제공하겠습니다.

편집은

사실, 문제가 될 것 같습니다 : 빈 문자열 baseUrl, JS 및 뷰에서 CSS 스크립트를 포함하여 잘 작동; 하지만 Ajax를 사용해야 할 때가 있습니다. 기본 URL은 /index.dev.php 부분이 있어야 응용 프로그램 환경을 유지할 수 있습니다. 이 마지막 부분이 같은 질문이나 새로운 질문에 있어야하는지 나는 모른다.

+1

'Zend_View_Helper_BaseUrl'은 실제로 스크립트 이름을 제거한다는 점을 제외하면'Zend_Controller_Request_Http-> getBaseUrl()'에 대한 프록시입니다. –

답변

0

보기 내의 baseUrl은 스크립트 이름을 제거하므로 $_SERVER['SCRIPT_NAME']을 추가하면 수정해야합니다.