Comment obtenir l'url actuelle complète pour Cakephp

Comment faites-vous écho à L'URL actuelle dans la vue de Cake?

50
demandé sur Passionate Developer 2011-07-27 01:44:20

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.

74
répondu Abba Bryant 2011-07-29 15:18:39

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/
44
répondu trante 2015-07-25 14:51:20
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>

Modifier: ou,

<?php echo $this->Html->url( null, true ); ?>
25
répondu JJJ 2011-07-26 22:13:49

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).

10
répondu Costa 2013-01-16 03:42:25

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.

5
répondu AndreyP 2017-08-14 15:04:32

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.

4
répondu SimonDowdles 2012-04-02 08:15:33

Pour CakePHP 3:

$this->Url->build(null, true) // full URL with hostname

$this->Url->build(null) // /controller/action/params
4
répondu Alex Stallen 2014-09-08 12:14:19

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; ?>">
3
répondu Guillaume 2016-11-28 16:49:38

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

2
répondu Subodh Ghulaxe 2017-05-23 12:26:08

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;
2
répondu giuseppe 2014-03-05 13:40:15

Pour obtenir L'URL complète sans paramètres:

echo $this->Html->url('/', true);

Retourne http(s)://(www.)your-domain.com

2
répondu Thomas Rbt 2017-05-11 09:28:18

La Manière de gâteau pour 1.3 est d'utiliser Router:: reverse:

Lien vers la documentation

$url = Router::reverse($this->params)
echo $url;

Rendements

/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true&param2=27
1
répondu Steve Tauber 2015-07-26 20:46:38

Pour cakephp3+:

$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);

Obtiendra par exemple: http://bgq.dev / accueil / index?t44=333

1
répondu Cao Vison 2016-05-19 03:17:15

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) ?>
1
répondu Markus Ethur 2017-05-09 18:14:54

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
1
répondu MSS 2017-12-31 10:43:28

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.

0
répondu Dunhamzzz 2011-07-27 08:39:57

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.

0
répondu soletan 2012-10-21 13:55:58

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

0
répondu User 2014-04-01 19:42:08

Cakephp 3.x n'importe où:

Router::reverse(Router::getRequest(),true)
0
répondu Amorphous 2016-01-05 18:56:52

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
0
répondu Br.sasa 2016-03-07 23:06:50

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

0
répondu Samphors 2016-11-23 02:34:27

Dans CakePHP 3 $this->here sera obsolète. La manière réelle utilise cette méthode:

Router::url($this->request->getRequestTarget())
0
répondu Dennis Gabriel Kruk 2018-07-10 10:30:20