So erhalten Sie die vollständige aktuelle URL für Cakephp

Lesezeit: 5 Minuten

Wie geben Sie die aktuelle URL in Cakes Ansicht aus?

Benutzer-Avatar
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 verwenden here() 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

Benutzer-Avatar
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 die prohjectname Teil. Irgendeine Möglichkeit, das zu beheben?

    – Axel Köhler

    17. Juni 2021 um 16:58 Uhr

Benutzer-Avatar
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


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

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
Alex Stallen

für CakePHP 3:

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

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

1334010cookie-checkSo erhalten Sie die vollständige aktuelle URL für Cakephp

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy