CodeIgniter: So erhalten Sie Controller-, Aktions- und URL-Informationen

Lesezeit: 4 Minuten

Benutzer-Avatar
noname.cs

Ich habe diese URLs:

So erhalten Sie den Controllernamen und den Aktionsnamen von diesen URLs. Ich bin CodeIgniter-Neuling. Gibt es eine Hilfsfunktion, um diese Informationen zu erhalten

Ex:

$params = helper_function( current_url() )

Wo $params wird so etwas wie

array (
  'controller' => 'system/settings', 
  'action' => 'edit', 
  '...'=>'...'
)

Benutzer-Avatar
Samson

Du könntest die verwenden URI-Klasse:

$this->uri->segment(n); // n=1 for controller, n=2 for method, etc

Mir wurde auch gesagt, dass Folgendes funktioniert, kann es aber derzeit nicht testen:

$this->router->fetch_class();
$this->router->fetch_method();

  • Da mein Controller einen Unterordner hat, gibt $this->uri->segment(1) den Namen des Controllers möglicherweise falsch zurück. Vielen Dank für Ihre Hilfe, ich benutze $this->router, um die Informationen zu erhalten.

    – noname.cs

    14. Januar 2010 um 4:32 Uhr

  • Um das Verzeichnis korrekt zu erhalten, können Sie auch Folgendes verwenden: $this->router->fetch_directory();

    – jmserra

    8. Oktober 2013 um 16:01 Uhr


  • Hey, wenn Sie Codeigniter 3 verwenden, dann für Controller: $this->router->class; für Methode: $this->router->method; für Verzeichnis: $this->router->directory; Dokumentation: codeigniter.com/user_guide/installation/…

    – Kartalot

    23. Mai 2016 um 21:55 Uhr

  • $this->router->fetch_class(); $this->router->fetch_method(); Es klappt.

    – Dinesh Patra

    17. März 2017 um 11:55 Uhr

Anstatt URI-Segmente zu verwenden, sollten Sie Folgendes tun:

$this->router->fetch_class(); // class = controller
$this->router->fetch_method();

Auf diese Weise wissen Sie, dass Sie immer die richtigen Werte verwenden, auch wenn Sie sich hinter einer gerouteten URL, in einer Subdomain usw. befinden.

  • Ich habe gerade herausgefunden, dass Sie mit dieser Methode nicht den richtigen Namen der Klassenmethode erhalten können, wenn Sie eine Ansicht wie aufrufen modules::run('module/controller/action'). Es zeigt nur die Router-Informationen der geladenen Seite. Gibt es eine Möglichkeit, dies zu überwinden?

    – Starx

    13. Februar 2012 um 7:26 Uhr


  • Genial! Irgendein Wort darüber, wie sicher das ist? Dh kann das gespooft werden?

    – HellaMad

    13. März 2013 um 1:14 Uhr

  • Dies sollte die akzeptierte Antwort sein – oder mit der Abkürzung: $this->router->class

    – ChristoKiwi

    15. März 2015 um 23:42 Uhr

  • Nicht, wenn Sie die Routen in routes.php ändern, $this->router gibt die Klasse zurück, in der der Code ausgeführt wird, aber nicht den tatsächlichen Router, der mit der Überschreibung maskiert ist. Beide Antworten sind sehr nützlich, je nachdem, was Sie tun möchten.

    – Tibor Szasz

    19. Januar 2016 um 11:08 Uhr

  • Diese Methoden wurden veraltet, verwenden $this->router->class und $this->router->method stattdessen

    – Richard

    16. Januar 2017 um 7:14 Uhr

Benutzer-Avatar
lumos0815

Die Methoden sind veraltet.

$this->router->fetch_class();
$this->router->fetch_method();

Sie können stattdessen auf die Eigenschaften zugreifen.

$this->router->class;
$this->router->method;

Sehen Codeigniter-Benutzerhandbuch

URI-Routing-Methoden fetch_directory(), fetch_class(), fetch_method()

Mit Eigenschaften CI_Router::$directory, CI_Router::$class und
CI_Router::$method öffentlich zu sein und ihre jeweiligen fetch_*() nichts anderes mehr tun, um die Eigenschaften einfach zurückzugeben – es macht keinen Sinn, sie zu behalten.

Dies sind alles interne, undokumentierte Methoden, aber wir haben uns entschieden, sie vorerst zu verwerfen, um für alle Fälle die Abwärtskompatibilität aufrechtzuerhalten. Wenn einige von Ihnen sie verwendet haben, können Sie jetzt stattdessen einfach auf die Eigenschaften zugreifen:

$this->router->directory;
$this->router->class;
$this->router->method;

Ein anderer Weg

$this->router->class

Als Ergänzung

$this -> router -> fetch_module(); //Module Name if you are using HMVC Component

  • Dies fetch_module() call funktioniert bei mir nicht in CI 2.1.2. Kann es in der Datei /system/router.php nicht finden.

    – Tim Petersen

    27. August 2013 um 12:53 Uhr


  • @timpeterson, Es ist nur in der HMVC-Komponente verfügbar, wie in der Antwort angegeben.

    – Starx

    27. August 2013 um 18:00 Uhr

Aktualisieren

Die Antwort wurde 2015 hinzugefügt und die folgenden Methoden sind jetzt veraltet

$this->router->fetch_class();  in favour of  $this->router->class; 
$this->router->fetch_method(); in favour of  $this->router->method;

Hallo, Sie sollten den folgenden Ansatz verwenden

$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action

Zu diesem Zweck, aber um dies zu verwenden, müssen Sie Ihren Haken aus dem verlängern CI_Controller und es funktioniert wie ein Zauber, Sie sollten keine URI-Segmente verwenden

  • Dies fetch_module() call funktioniert bei mir nicht in CI 2.1.2. Kann es in der Datei /system/router.php nicht finden.

    – Tim Petersen

    27. August 2013 um 12:53 Uhr


  • @timpeterson, Es ist nur in der HMVC-Komponente verfügbar, wie in der Antwort angegeben.

    – Starx

    27. August 2013 um 18:00 Uhr

Benutzer-Avatar
Monsterm

Wenn Sie $this->uri->segment verwenden und sich die Regeln zum Umschreiben von URLs ändern, geht der Abgleich der Segmentnamen verloren.

1358230cookie-checkCodeIgniter: So erhalten Sie Controller-, Aktions- und URL-Informationen

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

Privacy policy