Obtenir la valeur baseurl dans mes contrôleurs
-
27-09-2019 - |
Question
Am la création d'une aide d'action qui nécessitera la valeur de retour de la
Zend_View_Helper_BaseUrl
Comment puis-je cela?
La solution
$this->view->baseUrl()
devrait fonctionner.
Mais je suggère la création de nouvelles aide d'action, qui est essentiellement une copie d'aide de vue, mais vous pouvez modifier en fonction de vos besoins:
/**
* 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;
}
}
Autres conseils
Vous pouvez obtenir une poignée à la vue de partout en vous application avec:
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$view = $viewRenderer->view;
Il y a une chance que la vue ne sera pas encore initialisé, mais d'un ActionHelper qui ne devrait pas être un problème. Vous pouvez également obtenir l'URL utilisée par l'assistant de vue BaseUrl avec:
Zend_Controller_Front::getInstance()->getBaseUrl();
Je ne suis pas en mesure de vérifier en ce moment, mais je crois qu'une action Helper va avoir accès au contrôleur via $this->getActionController()
qui a une public $view
si:
$baseUrl = $this->getActionController()->view->baseUrl();