Comment obtenir l'url actuelle complète pour Cakephp
Comment faites-vous écho à L'URL actuelle dans la vue de Cake?
22 réponses
Vous pouvez faire soit
À Partir d'un fichier de vue:
<?php echo $this->here; ?>
Qui vous donnera l'url absolue du nom d'hôte, c'est-à-dire /controller/action/params
Ou
<?php echo Router::url( $this->here, true ); ?>
Qui devrait vous donner l'url complète avec le nom d'hôte.
Je préfère ceci, parce que si Je ne mentionne pas le mot" request", mon IDE donne un avertissement.
<?php echo $this->request->here; ?>
Document API: classe-CakeRequest
Modifier: Pour clarifier toutes les options
Current URL: http://example.com/en/controller/action/?query=12
// Router::url(null, true)
http://example.com/en/controller/action/
// Router::url(null, false)
/en/controller/action/
// $this->request->here
/en/controller/action/
// $this->request->here()
/en/controller/action/?query=12
// $this->request->here(false)
/en/controller/action/?query=12
// $this->request->url
en/controller/action
// $_SERVER["REQUEST_URI"]
/en/controller/action/?query=12
// strtok($_SERVER["REQUEST_URI"],'?');
/en/controller/action/
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>
Modifier: ou,
<?php echo $this->Html->url( null, true ); ?>
La "manière de gâteau" suivante est utile car vous pouvez récupérer l'URL actuelle complète et en modifier certaines parties sans avoir à analyser manuellement la chaîne $_SERVER[ 'REQUEST_URI' ]
, puis la concaténer manuellement en une url valide pour la sortie.
Complet url:Router::reverse($this->request, true)
Modifier Facilement des parties spécifiques de l'url actuelle:
1) faire une copie de l'objet de demande de gâteau:
$request_copy = $this->request
2) Puis modifier $request_copy->params
et/ou $request_copy->query
tableaux
3) Enfin: $new_url = Router::reverse($request_copy, true)
.
Cakephp 3.5:
echo $this->Url->build($this->request->getRequestTarget());
Appeler $ this - > request - > here() est obsolète depuis 3.4, et sera supprimé dans 4.0.0. Vous devriez utiliser getRequestTarget() à la place.
Je sais que ce post est un peu daté, et les versions de CakePHP ont prospéré depuis. Dans le courant (2.1.x) version de CakePHP et même en 1.3.x si Je ne me trompe pas, on peut obtenir l'url de contrôleur/vue actuelle comme ceci:
$this->params['url'];
Bien que cette méthode ne renvoie pas les paramètres, elle est pratique si vous voulez ajouter des paramètres à un lien lors de la création de nouvelles URL. par exemple, nous avons L'URL actuelle:
Projets/modifier/6
Et nous voulons ajouter une coutume action de paramètre appelée c_action avec une valeur de remove_image, on pourrait utiliser $this->params['url];
et le fusionner avec un tableau de paires de paramètres personnalisés key => value:
echo $this->Html->link('remove image', array_merge($this->params['url'], array('c_action' => 'remove_image'));
En utilisant la méthode ci-dessus, nous pouvons ajouter nos paramètres personnalisés au lien et ne pas provoquer une longue chaîne de paramètres sur L'URL, car $this - > params ['url] ne renvoie jamais l'URL de l'action de contrôle.
Dans l'exemple ci-dessus, nous aurions besoin d'ajouter manuellement l'ID de 6 dans L'URL, donc perahaps le la construction finale du lien serait comme ceci:
echo $this->Html->link('remove image', array_merge($this->params['url'], array($id,'c_action' => 'remove_image'));
Où $est est l'ID du projet et vous avez affecté à la variable $id , au niveau du contrôleur de. La nouvelle URL sera alors:
Projets/modifier/6/c_action:remove_image
Désolé si cela n'a aucun rapport, mais j'ai rencontré cette question lors de la recherche d'une méthode pour atteindre ce qui précède et j'ai pensé que d'autres pourraient en bénéficier.
Pour CakePHP 3:
$this->Url->build(null, true) // full URL with hostname
$this->Url->build(null) // /controller/action/params
Obtenir L'URL actuelle pour CakePHP 3.x ?
Dans votre mise en page:
<?php
$here = $this->request->here();
$canonical = $this->Url->build($here, true);
?>
Vous obtiendrez L'URL complète de la page en cours, y compris les paramètres de chaîne de requête.
Par exemple http://website.exemple / contrôleur / action?param=valeur
Vous pouvez l'utiliser dans une balise meta canonique si vous avez besoin de faire du référencement.
<link rel="canonical" href="<?= $canonical; ?>">
Obtenir l'URL actuelle est assez simple dans votre fichier de vue
echo Router::url($this->here, true);
Cela renverra l'url complète http://www.example.com/subpath/subpath
Si vous voulez juste le chemin relatif, utilisez ce qui suit
echo $this->here;
OU
Idéalement, Router:: url("", true) devrait renvoyer une URL absolue de la vue actuelle, mais elle renvoie toujours l'URL relative. Donc, le hack pour obtenir l'URL absolue est
$absolute_url = FULL_BASE_URL + Router::url(“”, false);
Pour obtenir la vérification FULL_BASE_URL ici
Dans l'objet request, vous avez tout ce dont vous avez besoin. Pour le comprendre:
debug($this->request->url);
Et dans votre cas,
$here = $this->request->url;
Pour obtenir L'URL complète sans paramètres:
echo $this->Html->url('/', true);
Retourne http(s)://(www.)your-domain.com
La Manière de gâteau pour 1.3 est d'utiliser Router:: reverse:
$url = Router::reverse($this->params)
echo $url;
Rendements
/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true¶m2=27
Pour cakephp3+:
$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);
Obtiendra par exemple: http://bgq.dev / accueil / index?t44=333
En Vue:
Blank URL: <?php echo $this->Html->Url('/') ?>
Blank Full Url: <?php echo $this->Html->Url('/', true) ?>
Current URL: <?php echo $this->Html->Url($this->here) ?>
Current Full URL: <?php echo $this->Html->Url($this->here, true) ?>
Dans Le Contrôleur De
Blank URL: <?php echo Router::url('/') ?>
Blank Full Url: <?php echo Router::url('/', true) ?>
Current URL: <?php echo Router::url($this->request->here()) ?>
Current Full URL: <?php echo Router::url($this->request->here(), true) ?>
Le moyen le plus simple que j'ai trouvé est celui qui inclut host/path/query et
travaux dans Controllers
(Cakephp 3.4
):
Cake\View\Helper\UrlHelper::build($this->request->getRequestTarget());
Qui renvoie quelque chose comme ceci (nous l'utilisons comme url de rappel de connexion):
http://192.168.0.57/archive?melkId=12
J'utilise $this->here
pour le chemin, pour obtenir l'URL entière, vous devrez faire comme Juhana a dit et utiliser les variables $_SERVER
. Il n'y a pas besoin d'utiliser une fonction de gâteau pour cela.
Toutes les approches proposées précédemment ne répondaient pas à mes exigences pour obtenir une URL complète (complète comme dans qualified), par exemple pour être utilisée dans un e-mail envoyé par l'action du contrôleur. J'ai aussi besoin du schéma et du nom d'hôte, et j'ai donc trébuché sur l'approche suivante:
<?php echo Router::url( array( $id ), true ) ?>
En raison de la fourniture d'un contrôleur de courant de réseau de routeur et l'action est conservée, mais l'id ne l'est pas et doit donc être fourni ici à nouveau. Le deuxième argument true
demande en fait d'ajouter le nom d'hôte, etc. pour obtenir de l'URL complète.
L'utilisation de Router:: url () est disponible dans toutes les situations et peut donc être utilisée dans les fichiers de vue.
Oui, est facile URL complète dans le travail de contrôleur dans CakePHP 1.3 >
<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );
Saludos
Cakephp 3.x n'importe où:
Router::reverse(Router::getRequest(),true)
Pour CakePHP 3.x Vous pouvez utiliser UrlHelper
:
$this->Url->build(null, true) // output http://somedomain.com/app-name/controller/action/params
$this->Url->build() // output /controller/action/params
, Ou vous pouvez utiliser PaginatorHelper
(dans le cas où vous souhaitez l'utiliser en javascript ou ...):
$this->Paginator->generateUrl() // returns a full pagination URL without hostname
$this->Paginator->generateUrl([],null,true) // returns a full pagination URL with hostname
Utiliser Html helper
<?php echo $this->Html->url($this->here, true); ?>
Il va produire l'url complète qui va commencer à partir de http ou https
Dans CakePHP 3 $this->here
sera obsolète. La manière réelle utilise cette méthode:
Router::url($this->request->getRequestTarget())