web-dev-qa-db-fra.com

Comment obtenir l'URL actuelle complète pour Cakephp

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

54

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.

77
Abba Bryant

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/
47
trante
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>

Éditeur,

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

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ète
Router::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).

11
Costa

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.

7
AndreyP

pour CakePHP 3:

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

$this->Url->build(null) // /controller/action/params
5
Alex Stallen

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.

5
SimonDowdles

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; ?>">
4
Guillaume

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

3
Subodh Ghulaxe

Pour obtenir l'URL complète sans paramètre:

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

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

3
Thomas Rbt

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;
3
giuseppe

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
1
MSS

pour cakephp3 +:

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

obtiendra par exemple: http://bgq.dev/home/index?t44=333

1
Cao Vison

La façon dont Cake utilise la version 1.3 consiste à utiliser Router :: reverse:

Lien vers la documentation

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

les rendements

/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true&param2=27
1
Steve Tauber

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) ?>
1
Markus Ethur

Dans CakePHP 3, $this->here sera obsolète. La méthode actuelle utilise cette méthode:

Router::url($this->request->getRequestTarget())
0
Dennis Gabriel Kruk

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.

0
soletan

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
0
Br.sasa

Cakephp 3.x n'importe où:

Router::reverse(Router::getRequest(),true)
0
Amorphous

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

0
Samphors

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

0
User

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.

0
Dunhamzzz