63 votes

Comment faire pour obtenir l'url actuelle de Cakephp

Comment faites-vous l'écho courant de l'URL dans la Gâteau de vue?

89voto

Abba Bryant Points 2969

Vous pouvez le faire soit

À partir d'un fichier de vue:

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

Qui va vous donner 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 de l'hôte.

55voto

trante Points 3811

Je préfère cela, car si je ne parle pas de "demande" mot, mon IDE donne l'avertissement.

<?php echo $this->request->here; ?>

API Document: http://api.cakephp.org/2.3/class-CakeRequest.html#_here


Edit: Afin de 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/

27voto

Juhana Points 20999
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>

EDIT: ou,

<?php echo $this->Html->url( null, true ); ?>

11voto

Costa Points 2909

La suite de "Gâteau à la manière" est utile, car vous pouvez prendre le plein courant d'URL et de modifier des pièces de sans manuellement afin d'analyser l' $_SERVER[ 'REQUEST_URI' ] chaîne de caractères manuellement, puis concaténer dans une url valide pour la sortie.

Tout le courant de l'url:
Router::reverse($this->request, true)

Modifier facilement des parties spécifiques de l'url actuelle:
1) faire une copie de Gâteau à la demande de l'objet: $request_copy = $this->request

2) Puis modifiez $request_copy->params et/ou $request_copy->query tableaux

3) Enfin: $new_url = Router::reverse($request_copy, true).

6voto

SimonDowdles Points 921

Je sais que ce post est un peu daté, et CakePHP versions ont prospéré depuis. Dans le courant (2.1.x) la version de CakePHP, et même dans 1.3.x si je ne me trompe pas, on peut obtenir le régulateur de courant/affichage de l'url comme ceci:

$this->params['url'];

Bien que cette méthode ne renvoie PAS de paramètres, il est très pratique si vous voulez ajouter des paramètres à une de lien lors de la construction de nouvelles URL. Par exemple, nous avons de l'actuel de l'adresse URL:

projets/modifier/6

Et nous voulons ajouter un paramètre personnalisé d'action appelé c_action avec une valeur de remove_image, on peut utiliser l' $this->params['url]; et de fusionner avec un tableau de paramètres personnalisés paires clé => valeur:

echo $this->Html->link('remove image', array_merge($this->params['url'], array('c_action' => 'remove_image'));

À l'aide de la méthode ci-dessus, nous sommes en mesure d'ajouter notre paramètres personnalisés pour le lien et de ne pas causer une longue chaîne sur les paramètres pour construire l'URL, parce que $this->params['url] ne jamais renvoie le controll URL de l'action.

Dans l'exemple ci-dessus, nous aurions besoin d'ajouter manuellement l'ID de 6 à revenir dans l'URL, donc perahaps le maillon final de construire 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. La nouvelle adresse sera:

projets/modifier/6/c_action:remove_image

Désolé si cela a le moindre non, mais j'ai couru à travers cette question lors de la recherche d'une méthode pour y parvenir et pensé que d'autres puissent en bénéficier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X