Comment faites-vous l'écho de l'URL actuelle dans la vue de Cake?
Vous pouvez faire soit
À partir d'un fichier de vue:
<?php echo $this->here; ?>
Ce qui vous donnera l'URL absolue du nom d'hôte, à savoir/controller/action/params
Ou
<?php echo Router::url( $this->here, true ); ?>
ce qui devrait vous donner l'URL complète avec le nom d'hôte.
Je préfère cela, parce que si je ne mentionne pas "demande" Word, mon IDE donne un avertissement.
<?php echo $this->request->here; ?>
Document API: class-CakeRequest
Edit: 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' ]; ?>
Éditeur,
<?php echo $this->Html->url( null, true ); ?>
Le "Chemin du gâteau" suivant 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 dans une URL valide pour la sortie.
RL actuelle complèteRouter::reverse($this->request, true)
Modification facile de parties spécifiques de l’URL actuelle:
1) Faites une copie de l'objet requête de Cake: $request_copy = $this->request
2) Modifiez ensuite les tableaux $request_copy->params
et/ou $request_copy->query
3) Enfin: $new_url = Router::reverse($request_copy, true)
.
Cakephp 3.5:
echo $this->Url->build($this->request->getRequestTarget());
L'appel de $ this-> request-> here () est obsolète depuis 3.4 et sera supprimé de la 4.0.0 Vous devriez utiliser getRequestTarget () à la place.
pour CakePHP 3:
$this->Url->build(null, true) // full URL with hostname
$this->Url->build(null) // /controller/action/params
Je sais que ce post est un peu daté, et les versions de CakePHP ont fleuri depuis. Dans la version actuelle (2.1.x) de CakePHP et même dans la version 1.3.x, si je ne me trompe pas, on peut obtenir l'URL actuelle du contrôleur/vue comme ceci:
$this->params['url'];
Bien que cette méthode ne renvoie PAS les paramètres, il est utile si vous souhaitez ajouter des paramètres à un lien lors de la création d'une nouvelle URL. Par exemple, nous avons l'URL actuelle:
projets/edit/6
Et nous voulons ajouter une action de paramètre personnalisé appelée c_action avec la valeur remove_image. On pourrait utiliser $this->params['url];
et le fusionner avec un tableau de paires de paramètres personnalisés clé =>:
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 créer de chaîne longue de paramètres sur l'URL, car $ this-> params ['url] ne renvoie que 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, de sorte que la construction finale du lien ressemblerait peut-être à ceci:
echo $this->Html->link('remove image', array_merge($this->params['url'], array($id,'c_action' => 'remove_image'));
Où $ is est l'ID du projet et vous l'auriez affecté à la variable $ id au niveau du contrôleur. La nouvelle adresse sera alors:
projets/edit/6/c_action: remove_image
Désolé si cela n’est pas du tout lié, mais j’ai rencontré cette question lorsque je recherchais une méthode pour atteindre ce qui précède et pensais que d’autres pourraient en tirer profit.
Obtenir l'URL actuelle de 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 actuelle, y compris les paramètres de chaîne de requête.
par exemple. http: //website.example/controller/action? param = value
Vous pouvez l'utiliser dans une balise méta 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 renvoie toujours l’URL relative. Donc, le hack pour obtenir l'URL absolue est
$absolute_url = FULL_BASE_URL + Router::url(“”, false);
Pour obtenir FULL_BASE_URL, vérifiez ici
Pour obtenir l'URL complète sans paramètre:
echo $this->Html->url('/', true);
retournera http(s)://(www.)your-domain.com
Dans l'objet de requête, vous avez tout ce dont vous avez besoin. Pour le comprendre:
debug($this->request->url);
et dans votre cas
$here = $this->request->url;
Le moyen le plus simple que j’ai trouvé est celui qui inclut hôte/chemin/requête et
fonctionne dans Controllers
(Cakephp 3.4
):
Cake\View\Helper\UrlHelper::build($this->request->getRequestTarget());
qui retourne quelque chose comme ceci (nous l'utilisons comme url de rappel de login):
http://192.168.0.57/archive?melkId=12
pour cakephp3 +:
$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);
obtiendra par exemple: http://bgq.dev/home/index?t44=333
La façon dont Cake utilise la version 1.3 consiste à utiliser Router :: reverse:
$url = Router::reverse($this->params)
echo $url;
les rendements
/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true¶m2=27
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
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) ?>
Dans CakePHP 3, $this->here
sera obsolète. La méthode actuelle utilise cette méthode:
Router::url($this->request->getRequestTarget())
Toutes les approches proposées précédemment ne répondaient pas à mes exigences pour obtenir une URL complète (complète comme qualifié), par exemple. à utiliser dans un courrier électronique envoyé par une action du contrôleur. J'ai aussi besoin du schéma et du nom d'hôte, et suis donc tombé sur l'approche suivante:
<?php echo Router::url( array( $id ), true ) ?>
En raison de la fourniture du contrôleur de réseau de routeurs et de l'action conservée, l'identifiant ne l'est pas et doit donc être fourni ici. Le deuxième argument true
demande en fait d'ajouter le nom d'hôte, etc., de manière à obtenir l'URL complète.
Utiliser Router :: url () est disponible dans toutes les situations et peut donc également être utilisé dans les fichiers de vue.
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
(au cas où vous voudriez 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
Cakephp 3.x n'importe où:
Router::reverse(Router::getRequest(),true)
Utiliser l'assistant HTML
<?php echo $this->Html->url($this->here, true); ?>
Il va produire l'URL complète qui va commencer à partir de http ou https
Oui, c'est facile URL complète dans Controller Work dans CakePHP 1.3>
<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );
Saludos
J'utilise $this->here
pour le chemin, pour obtenir l'URL complète que vous devrez faire comme Juhana l'a dit et utiliser les variables $_SERVER
. Il n'est pas nécessaire d'utiliser une fonction Cake pour cela.