Erster den baseurl Wert in meinen Controller
-
27-09-2019 - |
Frage
Am Erstellen einer Aktion Helfer, der den Rückgabewert des
benötigenZend_View_Helper_BaseUrl
Wie gehe ich davon?
Lösung
$this->view->baseUrl()
sollte funktionieren.
Aber ich schlage vor, die Schaffung neuer Action Helfer, die im Grunde eine Kopie View Helfer ist, aber Sie können ändern, um Ihre Bedürfnisse anzupassen:
/**
* 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;
}
}
Andere Tipps
Sie können einen Griff in die Ansicht von überall kommen in Ihnen App mit:
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$view = $viewRenderer->view;
Es gibt eine Chance, dass die Sicht wird noch nicht initialisiert werden, sondern von einem ActionHelper ist das kein Problem sein sollte. Sie könnten auch die URL der BaseUrl View Helfer verwendet bekommen mit:
Zend_Controller_Front::getInstance()->getBaseUrl();
Ich bin jetzt nicht in der Lage zu überprüfen, aber ich glaube, dass ein Action-Helper wird Zugriff auf die Steuerung über $this->getActionController()
haben, die ein public $view
hat so:
$baseUrl = $this->getActionController()->view->baseUrl();