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() )

$params devient quelque chose comme

array (
  'controller' => 'system/settings', 
  'action' => 'edit', 
  '...'=>'...'
)
Était-ce utile?

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, et CI_Router::$class   CI_Router::$method être public et leur fetch_*() 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];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top