2010-01-06 3 views
3

Mon site utilise le framework zend et s'exécute dans un sous-dossier, par exemple: http://www.example.com/sub/folder. Maintenant, je veux ajouter mes liens css avec/sub/folder/pour charger le css dans des pages comme http://www.example.com/sub/folder/product/abc, je pensais avoir trouvé une aide à la vue pour faire BaseUrl mais BaseUrl ne semble fonctionner que dans les fichiers de vue réels et pas dans un bootstrap classe. Est-ce que quelqu'un sait la raison de ceci et une solution de contournement exceptionnelle?zendframework baseUrl voir helper dans bootstrap

Ceci est un extrait de ma classe 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')); 
    } 
} 

Répondre

5

J'ai trouvé la raison pour laquelle l'aide baseUrl() vue ne fonctionne pas dans le Bootstrap . C'est parce que Zend_Controller_Front n'avait pas de Zend_Controller_Request. Donc, pour résoudre le problème, j'ai ajouté une autre méthode de ressources pour initialiser la demande.

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

Merci, cela a résolu mon problème! – Yeroon

1

Pour baseUrl vous pouvez utiliser

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

ou une solution non ZF:

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

Merci pour votre réponse, mais Zend_Controller_Front :: getInstance() -> getBaseUrl(); est déjà utilisé dans l'assistant de vue. Si j'utilise Zend_Controller_Front :: getInstance() -> getBaseUrl(); dans la classe bootstrap, elle renvoie null. – vdrmrt

+0

+1 pour la solution non ZF: ^) – Katia

0

En fait, vous n'avez pas besoin d'obtenir la baseUrl car ZF le fait déjà pour vous. Vous devez juste faire attention à votre chemin. N'utilisez pas le premier slash! sinon, ZF renverra l'adresse distante.

Il suffit d'utiliser '$this->_view->headLink()->appendStylesheet('css/main.css'); '