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?

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top