2010-01-06 3 views
3

Мой сайт использует фреймворк zend и работает в подпапке, например: http://www.example.com/sub/folder. Теперь я хочу добавить мои ссылки css с/sub/folder /, чтобы сделать загрузку css на таких страницах, как http://www.example.com/sub/folder/product/abc, я думал, что нашел помощника вида для этого BaseUrl, но BaseUrl, похоже, работает только в реальных файлах просмотра, а не в начальной загрузке класс. Кто-нибудь знает причину этого и исключаемое обходное решение?zendframework baseUrl view helper in bootstrap

Это фрагмент моего класса boodstrap.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initStylesheet() 
    { 
     $this->_logger->info('Bootstrap ' . __METHOD__); 

     $this->bootstrap('view'); 
     $this->_view = $this->getResource('view'); 

     $this->_view->headLink()->appendStylesheet($this->_view->baseUrl('/css/main.css')); 
    } 
} 

ответ

5

я нашел причину, почему baseUrl() помощник вида не работал в Bootstrap , Это потому, что у Zend_Controller_Front не было Zend_Controller_Request.

Чтобы решить проблему, я добавил другой метод ресурса для инициализации запроса.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initRequest() 
    { 
     $this->_logger->info('Bootstrap ' . __METHOD__); 

     $this->bootstrap('FrontController'); 

     $front = $this->getResource('FrontController'); 
     $request = new Zend_Controller_Request_Http(); 

     $front->setRequest($request); 
    } 

    protected function _initStylesheet() 
    { 
     $this->_logger->info('Bootstrap ' . __METHOD__); 

     $this->bootstrap('view'); 
     $this->_view = $this->getResource('view'); 

     $this->_view->headLink()->appendStylesheet($this->_view->baseUrl('/css/main.css')); 
    } 
} 
+0

Спасибо, это решило мою проблему! – Yeroon

1

Чтобы получить BaseUrl вы могли бы использовать

Zend_Controller_Front::getInstance()->getBaseUrl(); 

или нон решение ZF:

substr($_SERVER['PHP_SELF'], 0, -9); 
+1

спасибо за ответ, но Zend_Controller_Front :: деЫпзЬапс() -> getBaseUrl(); уже используется в помощнике вида. Если я использую Zend_Controller_Front :: getInstance() -> getBaseUrl(); в классе bootstrap он возвращает null. – vdrmrt

+0

+1 для решения без ZF: ^) – Katia

0

На самом деле, вам не нужно получать baseUrl, потому что ZF уже делает это за вас. Вам просто нужно обратить внимание на ваш путь. Не используйте первую косую черту! в противном случае ZF вернет удаленный адрес.

Просто используйте '$this->_view->headLink()->appendStylesheet('css/main.css'); '

Смежные вопросы