2010-04-19 5 views

ответ

4

$this->view->baseUrl() должен работать.

Но я предлагаю создать новый помощник действия, которая в основном копия зрения помощника, но вы можете изменить в соответствии с вашими потребностями:

/** 
* Generate URL of the current domain 
* 
*/ 
class My_Controller_Action_Helper_BaseUrl 
extends Zend_Controller_Action_Helper_Abstract 
{ 
    public function direct($file = null, $full = true) 
    { 
     return $this->baseUrl($file, $full); 
    } 

    /** 
    * BaseUrl 
    * 
    * @var string 
    */ 
    protected $_baseUrl; 

    /** 
    * Returns site's base url, or file with base url prepended 
    * 
    * $file is appended to the base url for simplicity 
    * 
    * @param string|null $file 
    * @return string 
    */ 
    public function baseUrl($file = null) 
    { 
     // Get baseUrl 
     $baseUrl = $this->getBaseUrl(); 

     // Remove trailing slashes 
     if (null !== $file) { 
      $file = '/' . ltrim($file, '/\\'); 
     } 

     return $baseUrl . $file; 
    } 

    /** 
    * Set BaseUrl 
    * 
    * @param string $base 
    * @return My_Controller_Action_Helper_BaseUrl 
    */ 
    public function setBaseUrl($base) 
    { 
     $this->_baseUrl = rtrim($base, '/\\'); 
     return $this; 
    } 

    /** 
    * Get BaseUrl 
    * @return string 
    */ 
    public function getBaseUrl() 
    { 
     if ($this->_baseUrl === null) { 
      /** @see Zend_Controller_Front */ 
      require_once 'Zend/Controller/Front.php'; 
      $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl(); 

      // Remove scriptname, eg. index.php from baseUrl 
      $baseUrl = $this->_removeScriptName($baseUrl); 

      $this->setBaseUrl($baseUrl); 
     } 

     return $this->_baseUrl; 
    } 

    /** 
    * Remove Script filename from baseurl 
    * 
    * @param string $url 
    * @return string 
    */ 
    protected function _removeScriptName($url) 
    { 
     if (!isset($_SERVER['SCRIPT_NAME'])) { 
      // We can't do much now can we? (Well, we could parse out by ".") 
      return $url; 
     } 

     if (($pos = strripos($url, basename($_SERVER['SCRIPT_NAME']))) !== false) { 
      $url = substr($url, 0, $pos); 
     } 

     return $url; 
    } 
} 
2

Я не в состоянии проверить прямо сейчас, но я считаю, что действие Helper будет иметь доступ к контроллеру через $this->getActionController() который имеет public $view так:

$baseUrl = $this->getActionController()->view->baseUrl(); 
3

Вы можете получить дескриптор вид из любого места в вас приложение с:

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
$view = $viewRenderer->view; 

Существует вероятность того, что точка зрения не будет инициализирован, но еще из ActionHelper, что не должно быть проблемой. Вы также можете получить URL, используемый вид помощника BaseUrl с:

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

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

  • Нет связанных вопросов^_^