web-dev-qa-db-fra.com

base_url dans CakePHP

Dans la plupart des applications Web, nous avons besoin de la variable var base_url. Dans cakephp pour obtenir base_url actuellement, je mets le code suivant sur la méthode beforeRender dans app_controller.php

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

Y a-t-il une alternative? Signifie-t-il une variable globale disponible pour obtenir l'URL de base plutôt que cela?

36
Musa

Oui il y a. Selon vous, vous pouvez accéder à:

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

De plus, vos informations d'hôte sont stockées dans le $_SERVER['HTTP_Host'] variable au cas où vous le voudriez.

Dans votre contrôleur, si vous voulez des URL complètes, utilisez ceci:

Router::url('/', true);
69
RabidFire

Utilisez l'option n'importe qui ci-dessous

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

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

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

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

  5. Définissez la constante dans Config/core.php comme define("BASE_URL", "www.yoursite.com/"); et utilisez BASE_URL N'importe où dans votre projet

et créer un assistant commun avec les fonctions suivantes

<?php
class CommonHelper extends AppHelper {

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

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

et utiliser n'importe où dans le projet

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

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

N'oubliez pas d'inclure l'assistant commun dans le contrôleur

Je recommande les méthodes 2 et 5 car elles donnent une URL complète.

28
Subodh Ghulaxe

Vous pouvez utiliser

<?php echo Router::fullbaseUrl();?>

ainsi que.

Reportez-vous http://book.cakephp.org/2.0/en/core-libraries/global-constants-and-functions.html pour plus de détails.

10
Keerthi Bandara

Utilisez Router::url('/', true) n'importe où dans votre application.
Plus précisément dans la vue, vous pouvez utiliser $this->Html->url('/', true) (ou tout autre Helper en fait, le Helper::url est héritée par tous les Helpers), qui n'est qu'un wrapper pour la méthode Router ci-dessus.

Dans les deux cas, le second paramètre true lui fait renvoyer l'URL complète.

9
deceze

Dans la plupart des cas, je suggère d'utiliser CakePHP HtmlHelper pour générer des URL, de cette façon, vous n'aurez pas à vous soucier de l'URL de base. Le moyen le plus convivial d'obtenir l'URL de base dans votre vue, cependant, serait <?php echo $html->webroot; ?>.

1
Nigel

Vous pouvez utiliser Router::fullBaseUrl()

Si vous avez par exemple example.com/test et que vous souhaitez ignorer/tester, vous pouvez utiliser 'full' => false. De plus, si vous voulez forcer ssl, vous pouvez ajouter '_ssl' => true.

c'est à dire.

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

Assurez-vous de passer null comme premier paramètre car il s'agit de l'URL de base au cas où vous voudriez le passer.

remarque: vous devez importer le routeur pour pouvoir utiliser la fonction ci-dessus:

use Cake\Routing\Router
1

Vous pouvez utiliser FULL_BASE_URL constant.

0
Gr Brainstorm