Frage

Am Erstellen einer Aktion Helfer, der den Rückgabewert des

benötigen
Zend_View_Helper_BaseUrl

Wie gehe ich davon?

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top