Wie geben Sie die aktuelle URL in Cakes Ansicht aus?
So erhalten Sie die vollständige aktuelle URL für Cakephp
Abba Bryant
Sie können beides tun
Aus einer Ansichtsdatei:
<?php echo $this->request->here() ?>">
Dadurch erhalten Sie die absolute URL aus dem Hostnamen, dh /controller/action/params
Oder
<?php echo Router::url(null, true) ?>
was Ihnen die vollständige URL mit dem Hostnamen geben sollte.
-
Randnotiz aus meiner Erfahrung (CakePHP 2+, beim Rest nicht sicher …) – Sie sollten verwenden
Router::url(null, true)
statt zu verwenden$this->here
. Der Grund dafür ist, dass $this->here, wenn Sie jemals einen fest eingestellten Basispfad konfigurieren müssen, ihn bereits enthalten wird und Ihre Links doppelt geroutet und unterbrochen werden. Ich wollte das nur weitergeben – verwirrte mich heute Abend zu Tode.– jokul
20. Januar 2012 um 3:17 Uhr
-
Auch in cake2.x
$this->here
würde nicht mehr reichen. Sie müssten verwenden$this->here()
da dies auch den Query-String anhängt (und damit dann die komplette URL bilden würde).– Kennzeichen
16. Januar 2013 um 9:08 Uhr
-
@mark, auf welcher Version bist du in 2.x? Ich bin in 2.4.5 und ich bekomme
PHP Fatal error: Call to undefined method MyController::here()
wenn ich versuche, die zu verwendenhere()
Methode.– Tyler Collier
29. Juli 2014 um 16:10 Uhr
-
Wahrscheinlich $this->request->here() 😉
– Kennzeichen
29. Juli 2014 um 17:04 Uhr
-
Bitte beachten Sie, dass dies nicht den Anforderungs-URI enthält
– Wladimir Nul
8. November 2017 um 18:40 Uhr
trante
Ich bevorzuge dies, denn wenn ich das Wort “Anfrage” nicht erwähne, gibt meine IDE eine Warnung aus.
<?php echo $this->request->here; ?>
API-Dokument:
Klasse-CakeRequest
Bearbeiten: Um alle Optionen zu klären
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/
-
Vielen Dank! Du bist ein Lebensretter.
– kronenloser König
6. August 2017 um 1:05 Uhr
-
Mein CakePHP-Projekt läuft auf der
localhost://projectname
URL (projectname
Ordner im LAMPP-Stapel), aber mit$_SERVER["REQUEST_URI"]
beinhaltet nicht dieprohjectname
Teil. Irgendeine Möglichkeit, das zu beheben?– Axel Köhler
17. Juni 2021 um 16:58 Uhr
JJJ
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>
Editor,
<?php echo $this->Html->url( null, true ); ?>
-
Es gibt keinen “Kuchenweg” für alles, was einfach mit einfachem PHP gemacht werden kann 🙂 Ich denke, Sie könnten es tun
echo $this->Html->url( null, true );
– JJJ
26. Juli 2011 um 22:09 Uhr
Costa
Der folgende “Kuchenweg” ist nützlich, da Sie die vollständige aktuelle URL abrufen und Teile davon ändern können, ohne die URL manuell analysieren zu müssen $_SERVER[ 'REQUEST_URI' ]
string und dann wieder manuell zu einer gültigen URL für die Ausgabe verkettet.
Vollständige aktuelle URL:
Router::reverse($this->request, true)
Einfaches Ändern bestimmter Teile der aktuellen URL:
1) Erstellen Sie eine Kopie des Anforderungsobjekts von Cake:
$request_copy = $this->request
2) Dann ändern $request_copy->params
und/oder $request_copy->query
Arrays
3) Endlich: $new_url = Router::reverse($request_copy, true)
.
Andrej P
Cakephp 3.5:
echo $this->Url->build($this->getRequest()->getRequestTarget());
Berufung $this->request->here()
ist seit 3.4 veraltet und wird in 4.0.0 entfernt. Du solltest benutzen getRequestTarget()
stattdessen.
$this->request
wird auch verworfen, $this->getRequest()
sollte benutzt werden.
-
Ein Kommentar zur akzeptierten Antwort hätte vielleicht ausgereicht 🙂
– Kennzeichen
14. August 2017 um 15:25 Uhr
-
Oder
$this->getRequest()->getRequestTarget()
um noch abwertungssicherer zu sein 😀– mehov
7. September 2020 um 11:32 Uhr
SimonDowdles
Ich weiß, dass dieser Beitrag etwas veraltet ist und CakePHP-Versionen seitdem floriert haben. In der aktuellen (2.1.x) Version von CakePHP und sogar in 1.3.x, wenn ich mich nicht irre, kann man die aktuelle Controller/View-URL so erhalten:
$this->params['url'];
Obwohl diese Methode die Parameter NICHT zurückgibt, ist sie praktisch, wenn Sie beim Erstellen neuer URLs Parameter an einen Link anhängen möchten. Zum Beispiel haben wir die aktuelle URL:
Projekte/Bearbeiten/6
Und wir möchten eine benutzerdefinierte Parameteraktion namens c_action mit einem Wert von remove_image anhängen, den man verwenden könnte $this->params['url];
und verschmelzen Sie es mit einem Array aus benutzerdefinierten Parameterschlüsseln => Wertpaaren:
echo $this->Html->link('remove image', array_merge($this->params['url'], array('c_action' => 'remove_image'));
Mit der obigen Methode können wir unsere benutzerdefinierten Parameter an den Link anhängen und keine lange Kette von Parametern auf der URL aufbauen, da $this->params[‘url] gibt immer nur die Kontrollaktions-URL zurück.
Im obigen Beispiel müssten wir die ID von 6 manuell wieder in die URL einfügen, also würde der endgültige Linkaufbau vielleicht so aussehen:
echo $this->Html->link('remove image', array_merge($this->params['url'], array($id,'c_action' => 'remove_image'));
Wobei $is die ID des Projekts ist und Sie es der Variablen $id zugewiesen hätten auf Controller-Ebene. Die neue URL lautet dann:
projects/edit/6/c_action:remove_image
Tut mir leid, wenn dies im geringsten nichts damit zu tun hat, aber ich bin auf diese Frage gestoßen, als ich nach einer Methode gesucht habe, um das oben Genannte zu erreichen, und dachte, andere könnten davon profitieren.
-
Ein Kommentar zur akzeptierten Antwort hätte vielleicht ausgereicht 🙂
– Kennzeichen
14. August 2017 um 15:25 Uhr
-
Oder
$this->getRequest()->getRequestTarget()
um noch abwertungssicherer zu sein 😀– mehov
7. September 2020 um 11:32 Uhr
Alex Stallen
für CakePHP 3:
$this->Url->build(null, true) // full URL with hostname
$this->Url->build(null) // /controller/action/params