CodeIgniter: Comment obtenir contrôleur, l'action, l'information URL
-
20-09-2019 - |
Question
Je ces URL:
Comment obtenir le nom du contrôleur, le nom d'action de ces URL. Je suis novice CodeIgniter. Y at-il une fonction d'aide pour obtenir cette information
Ex:
$params = helper_function( current_url() )
Où $params
devient quelque chose comme
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
La solution
Vous pouvez utiliser le URI classe :
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
J'ai aussi dit que les travaux suivants, mais je ne suis pas en mesure de test:
$this->router->fetch_class();
$this->router->fetch_method();
Autres conseils
Au lieu d'utiliser des segments URI vous devriez faire ceci:
$this->router->fetch_class(); // class = controller
$this->router->fetch_method();
De cette façon, vous savez que vous utilisez toujours les valeurs correctes, même si vous êtes derrière une URL routé, dans un sous-domaine, etc.
Les méthodes sont déconseillés.
$this->router->fetch_class();
$this->router->fetch_method();
Vous pouvez accéder aux propriétés à la place.
$this->router->class;
$this->router->method;
Guide de l'utilisateur CodeIgniter
URI méthodes de routage (fetch_directory), FETCH_CLASS (), fetch_method ()
Avec des propriétés
CI_Router::$directory
, etCI_Router::$class
CI_Router::$method
être public et leurfetch_*()
respectif ne faisant plus rien d'autre pour revenir juste les propriétés - il ne sens pour les garder.Ce sont toutes les méthodes internes, sans-papiers, mais nous avons choisi de désapprouver les pour l'instant afin de maintenir la compatibilité ascendante Au cas où. Si certains d'entre vous les avez utilisés, vous pouvez maintenant juste accéder aux propriétés à la place:
$this->router->directory; $this->router->class; $this->router->method;
Une autre façon
$this->router->class
En complément
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
Mise à jour
La réponse a été ajoutée était en 2015 et les méthodes suivantes sont maintenant dépréciée
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
Salut, vous devez utiliser l'approche suivante
$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action
à cet effet, mais d'utiliser ce dont vous avez besoin pour étendre votre crochet du CI_Controller
et il fonctionne comme un charme, vous ne devriez pas utiliser des segments uri
Si vous en utilisant $ this-> uri-> segment, si les règles de réécriture des urls changent, correspondance des noms de segments seront perdus.
Utilisez ce code partout dans la classe ou les bibliothèques
$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
dernier segment de l'URL sera toujours l'action. S'il vous plaît se présente comme suit:
$this->uri->segment('last_segment');
$this->router->fetch_class();
// classe fecth la classe dans le contrôleur $ this-> router-> fetch_method ();
// méthode
classe de contrôleur ne fonctionne pas toutes les fonctions.
donc je vous conseille d'utiliser les scripts suivants
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];
}