2010-11-28 21 views
30

En la mayoría de las aplicaciones web necesitamos global var base_url. En CakePHP para obtener base_url actualmente pongo el siguiente código en el método BeforeRender en app_controller.phpbase_url en CakePHP

function beforeRender(){ 
    $this->set('base_url', 'http://'.$_SERVER['SERVER_NAME'].Router::url('/')); 
} 

¿Hay alguna alternativa? Significa ¿hay alguna variable global disponible para obtener la url base en lugar de esto?

Respuesta

64

Sí, la hay. En su opinión, es posible acceder a:

<?php echo $this->webroot; ?> 

Además, su información de la máquina se almacena en la variable $_SERVER['HTTP_HOST'] en caso de que quiera eso.

En su controlador, si quieres URL completas, utilice esto:

Router::url('/', true); 
9

Uso Router::url('/', true) cualquier lugar de su aplicación.
Específicamente en la Vista, puede usar $this->Html->url('/', true) (o cualquier otro Ayudante, de hecho, el método Helper::url es heredado por todos los Ayudantes), que es solo un contenedor para el método anterior Router.

En cualquier caso, el second true parameter hace que devuelva la URL completa.

1

Para la mayoría de los propósitos, sugiero usar CakePHP HtmlHelper para generar URL, de esa manera no tendrá que preocuparse por la URL base. Sin embargo, la manera más amigable para el usuario de obtener la URL base en su vista sería <?php echo $html->webroot; ?>.

26

Uso cualquiera de las opciones siguientes

  1. <?php echo $this->Html->url('/');?>

  2. <?php Router::url('/', true); ?>

  3. <?php echo $this->base;?>

  4. <?php echo $this->webroot; ?>

  5. Definir constante en Config/core.php como define("BASE_URL", "www.yoursite.com/"); y utilizar BASE_URL cualquier lugar de su proyecto

y crear un ayudante común con las funciones siguientes

<?php 
class CommonHelper extends AppHelper { 

    function get_url($url){ 
     return BASE_URL.$url; 
    } 

    function get_src($url){ 
     echo BASE_URL.$url; 
    } 
} 
?> 

y utilizar en cualquier parte del proyecto

$this->redirect($this->Common->get_url("login"); 

<a href="<?php $this->Common->get_src('users/login');?>">login</a> 

No se olvidó de incluir Ayudante común en el controlador

Recomiendo el método 2 y 5 porque dan url completo.

0

Puede utilizar Router::fullBaseUrl()

Si usted tiene por ejemplo example.com/test y desea ignorar/prueba, puede utilizar 'completo' => false. También si quiere forzar ssl puede agregar '_ssl' => true.

decir

Router::fullBaseUrl(null, [ '_ssl' => true, 'full' => false] 

Asegúrese de pasar null como el primer parámetro ya que esta es la dirección URL base en caso de que quiera pasarla.

nota: necesita importar router para que pueda utilizar la función anterior:

use Cake\Routing\Router