Pregunta

Am creación de un ayudante de acción que requerirá el valor de retorno de la

Zend_View_Helper_BaseUrl

¿Cómo hago para que?

¿Fue útil?

Solución

$this->view->baseUrl() debería funcionar.

Pero Sugiero crear nueva ayudante de acción, que es básicamente una copia del ayudante de vista, pero se puede modificar para que se adapte a sus necesidades:

/**
 * 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;
    }
}

Otros consejos

Se puede obtener un identificador para la vista desde cualquier lugar de aplicación con que:

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

Hay una posibilidad de que la vista no se ha inicializado todavía, pero desde una ActionHelper que no debería ser un problema. También puede obtener la URL utilizada por el ayudante de vista BaseUrl con:

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

No estoy en condiciones de verificar en este momento, pero creo que un ayudante de acción va a tener acceso al controlador a través de $this->getActionController() que tiene una public $view manera:

 $baseUrl = $this->getActionController()->view->baseUrl();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top