php zend-framework zend-view zend-layout

php - Obteniendo basepath de view en zend framework



zend-framework zend-view (6)

Caso: está desarrollando un sitio con Zend Framework y necesita enlaces relativos a la carpeta en la que se implementa la aplicación web. Es decir, mysite.com/folder línea y localhost:8080 en desarrollo.

Lo siguiente funciona bien en controladores independientemente de la ubicación implementada:

$this->_helper->redirector->gotoSimple($action, $controller, $module, $params);

Y lo siguiente dentro de un viewcript, es decir. index.phtml:

<a href="<?php echo $this->url(array(''controller''=>''index'', ''action'' => ''index''), null, true); ?>">

¿Pero cómo obtengo el camino base correcto cuando se vincula a imágenes o hojas de estilo? (en un archivo layout.phtml, por ejemplo):

<img src=''<?php echo WHAT_TO_TYPE_HERE; ?>images/logo.png'' />

y

$this->headLink()->appendStylesheet( WHAT_TO_TYPE_HERE . ''css/default.css'');

WHAT_TO_TYPE_HERE debe reemplazarse por algo que dé

<img src="/folder/images/logo.png />` on mysite.com and `<img src="/images/logo.png />

en localhost


Puede obtener la url base del controlador frontal Zend_Controller_Front::getInstance()->getBaseUrl(); . Lo envuelvo en una vista de ayuda

class My_View_Helper_BaseUrl { /** * Get base url * * @return string */ public function baseUrl() { return rtrim(Zend_Controller_Front::getInstance()->getBaseUrl(),''/''); } }

Entonces en el marcado html tienes algo como <img src="<?php echo $this->baseUrl();?>/images/logo.png"/> La barra inclinada final se elimina en el helper para que cuando el la aplicación no se ejecuta en una subcarpeta (baseUrl está en blanco en ese caso) la ruta seguirá funcionando.


<?php /** * * @package TaMeR Library * @copyright (C) 2010 Dennis T Kaplan * @license GPL {@link http://www.gnu.org/licenses/gpl.html} * * @author Dennis T Kaplan */ /** @see Zend_View_Helper_Abstract */ require_once ''Zend/View/Helper/Abstract.php''; class TaMeR_View_Helper_BaseUrl extends Zend_View_Helper_Abstract { /** * 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) { $baseUrl = $domain = $subdomain = $protocol = $host = $port = NULL; $host = array_reverse(explode(''.'', $_SERVER[''HTTP_HOST''])); $domain = $host[1].''.''.$host[0]; $subdomain = (isset($host[2]) ? $host[2] : ''www''); if(getenv("HTTPS") == ''on'') { $protocol = ''https''; $port = $_SERVER[''SERVER_PORT''] != 443 ? '':''.$_SERVER[''SERVER_PORT''] : ''''; }else{ $protocol = ''http''; $port = $_SERVER[''SERVER_PORT''] != 80 ? '':''.$_SERVER[''SERVER_PORT''] : ''''; } // Remove trailing slashes if(NULL !== $file) { $file = ''/'' . ltrim($file, ''///'); }else{ $file = rtrim(dirname($_SERVER[''SCRIPT_NAME'']), ''/'') . ''/''; } $baseUrl = $protocol.''://''.$subdomain.''.''.$domain.$port.$file; return $baseUrl; } }


En caso de que alguien quiera saber la mejor manera y no quiera perder 2 horas buscando Zend / Google. Hay un asistente de vista para hacer eso.

$this->view->serverUrl();


Este es mi ayudante de baseUrl :

class Zend_View_Helper_BaseUrl extends Zend_View_Helper_Abstract { public function baseUrl() { $protocol = isset($_SERVER[''HTTPS'']) ? ''https'' : ''http''; $server = $_SERVER[''HTTP_HOST'']; $port = $_SERVER[''SERVER_PORT''] != 80 ? ":{$_SERVER[''SERVER_PORT'']}" : ''''; $path = rtrim(dirname($_SERVER[''SCRIPT_NAME'']), ''///') . ''/''; return "$protocol://$server$port$path"; } }


Esto funcionó para mí:

echo $ this-> serverUrl (). $ this-> url ()


Si desea el nombre de host en su archivo de layout , imprima esto y obtenga su nombre de HOST :

echo $this->serverUrl().$this->baseUrl()