CodeIgniter: Wie Controller, Aktion URL Informationen erhalten
-
20-09-2019 - |
Frage
Ich habe diese URLs:
Wie Controller-Namen zu erhalten, Aktionsnamen aus dieser URLs. Ich bin CodeIgniter Neuling. Gibt es irgendwelche Hilfsfunktion diese Informationen zu erhalten
Beispiel:
$params = helper_function( current_url() )
Wo $params
so etwas wie
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
Lösung
könnten Sie verwenden die URI Klasse :
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
Ich habe auch gesagt, dass die folgende Arbeit, aber ich bin derzeit nicht in der Lage zu testen:
$this->router->fetch_class();
$this->router->fetch_method();
Andere Tipps
Anstelle der Verwendung von URI-Segmente sollten Sie dies tun:
$this->router->fetch_class(); // class = controller
$this->router->fetch_method();
Auf diese Weise können Sie wissen, sind immer die richtigen Werte, auch wenn Sie hinter einer gerouteten URL sind, in einer Sub-Domain, etc.
Die Methoden sind veraltet.
$this->router->fetch_class();
$this->router->fetch_method();
Sie können stattdessen die Eigenschaften zugreifen zu können.
$this->router->class;
$this->router->method;
Siehe codeigniter Bedienungsanleitung
URI Routing Methoden fetch_directory (), fetch_class (), fetch_method ()
Mit Eigenschaften
CI_Router::$directory
,CI_Router::$class
undCI_Router::$method
ist öffentlich und ihre jeweiligenfetch_*()
nein etwas anderes zu tun mehr nur die Eigenschaften zurückkehren - es funktioniert nicht Sinn macht, sie zu halten.Das sind alle internen, nicht dokumentierte Methoden, aber wir haben sich dafür entschieden, verbitten sie jetzt, um Rückwärtskompatibilität zu halten nur für den Fall. Wenn einige von Ihnen diesen in Anspruch genommen haben, dann können Sie jetzt einfach Zugriff auf die Eigenschaften statt:
$this->router->directory; $this->router->class; $this->router->method;
Eine andere Möglichkeit,
$this->router->class
Als Zusatz
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
Aktualisieren
Die Antwort hinzugefügt wurde im Jahr 2015 war und die folgenden Methoden sind veraltet jetzt
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
Hallo, sollten Sie den folgenden Ansatz verwenden
$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action
für diesen Zweck aber für die Verwendung dieser Sie benötigen Haken von der CI_Controller
zu erweitern und es funktioniert wie ein Charme, sollten Sie nicht uri Segmente verwenden
Wenn Sie $ mit this-> uri-> Segment, wenn Urls Regeln ändern Umschreiben, werden Segmente name matching verloren.
Verwenden Sie diesen Code überall in der Klasse oder Bibliotheken
$current_url =& get_instance(); // get a reference to CodeIgniter
$current_url->router->fetch_class(); // for Class name or controller
$current_url->router->fetch_method(); // for method name
Zuletzt Segment der URL wird immer die Aktion sein. Bitte setzen Sie sich wie folgt aus:
$this->uri->segment('last_segment');
$this->router->fetch_class();
// fecth Klasse der Klasse in der Steuerung $ This-> Router-> fetch_method ();
// Methode
Controller-Klasse ist keine Funktionen arbeiten.
so empfehle ich Ihnen die folgenden Skripte verwenden
global $argv;
if(is_array($argv)){
$action = $argv[1];
$method = $argv[2];
}else{
$request_uri = $_SERVER['REQUEST_URI'];
$pattern = "/.*?\/index\.php\/(.*?)\/(.*?)$/";
preg_match($pattern, $request_uri, $params);
$action = $params[1];
$method = $params[2];
}