2009-12-10 13 views

Respuesta

24

de phpfour está bien, pero hay que comprobar si hay https: //, ftp: // y mailto: demasiado ... :)

I prefefer tener todas las URL raíz absoluta (/files/js/jquery.js). El "camino duro zend" es

<?php 
// document root for example.com is in /htdocs 
// but application's index.php resides in /htdocs/myapp/public 
echo $this->baseUrl('css/base.css'); 
//will return /myapp/public/css/base.css 

echo $this->serverUrl() . $this->baseUrl('css/base.css'); 
//will return http://www.example.com/myapp/public/css/base.css 

echo '//' . $this->getHelper('ServerUrl')->getHost() . $this->baseUrl('css/base.css'); 
//will return protocol relative URL //www.example.com/myapp/public/css/base.css 
+1

+1, lo mejor es utilizar un enfoque estándar el 99% del tiempo: Zend Framework ya incluye esto para usted. Si necesita cambiar la base de URL manualmente, también puede configurarla en el arranque. –

+2

echo $ this-> serverUrl(). $ this-> baseUrl ('cassbase.css'); (esto es absoluto utilizando zend serverurl view helper) –

+0

$ this-> baseUrl devuelve una URL relativa a la raíz del servidor web como se indica aquí: http://framework.zend.com/manual/en/zend.view.helpers .html # zend.view.helpers.initial.baseurl, TMHO esta respuesta es incorrecta. – AsTeR

0

No utilizaría $ _SERVER, usaría los valores de Zend_Controller_Request_Http::getServer($keyName); (o los getters directos en el objeto de solicitud cuando corresponda - olvidé cuáles son miembros directos del objeto y cuáles deben accederse con getServer) . Técnicamente, estos son exactamente los mismos valores, pero es mejor acceder a la IMO de la manera Zend que utilizar el acceso PHP sin procesar. Pero sí, reunirlos juntos debería proporcionarte lo que necesitas. Esta es en realidad la forma en que lo hice para un plugin/url helper de controlador SSL.

Podría haber una mejor manera, aunque ...

2

En mis aplicaciones, guardo un "baseUrl" en mi config solicitud y asignar a ese registro en bootstrapping. Más tarde utilizo el siguiente Ayudante de Vista para generar la URL:

<?php 

class Zend_View_Helper_UrlMap 
{ 
    public function UrlMap($original) 
    { 
     $newUrl = $original; 
     $baseUrl = Zend_Registry::get('baseUrl'); 

     if (strpos($newUrl, "http://") === false) { 
      $newUrl = $baseUrl . $newUrl; 
     } 

     return $newUrl; 
    } 
} 

Beneficio: Puedo hacer cualquier cambio en todas las direcciones URL en la vista desde un solo lugar.

Espero que esto ayude. forma

+2

'Zend_Registry' es bastante innecesario. Un enfoque mucho mejor usaría 'Zend_Controller_Front :: setBaseUrl()' y 'Zend_Controller_Front :: getBaseUrl()'. De esta forma, también puedes usar el asistente de visualización incluido para que no tengas que rodar el tuyo. –

13

Sin MVC

echo $this->serverUrl() . $this->baseUrl('cass/base.css'); 

o con MVC

echo $this->serverUrl() . $this->url(array('controller'=>'index','action'=>'index'),null,true); 
-1

Utilice el método siguiente.

<a href="<?php echo $this->url('application', ['action' => 'detail'], ['force_canonical' => true])?>">

Cuestiones relacionadas