web-dev-qa-db-fra.com

CodeIgniter: Comment obtenir des informations sur les contrôleurs, les actions et les URL

J'ai ces URLs:

Comment obtenir le nom du contrôleur, le nom de l'action à partir de ces URL? Je suis débutant CodeIgniter. Existe-t-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', 
  '...'=>'...'
)
109
noname.cs

Vous pouvez utiliser la classe URI :

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

On m'a également dit que les travaux suivants, mais je suis actuellement incapable de tester:

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

Au lieu d'utiliser des segments d'URI, procédez comme suit:

$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ée, dans un sous-domaine, etc.

127
Phil Sturgeon

Les méthodes sont obsolètes.

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

Vous pouvez accéder aux propriétés à la place.

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

Voir Guide de l'utilisateur de codeigniter

Méthodes de routage URI fetch_directory (), fetch_class (), fetch_method ()

Avec les propriétés CI_Router::$directory, CI_Router::$class et CI_Router::$method étant public et leur fetch_*() no plus faire autre chose que de renvoyer les propriétés - cela ne se fait pas logique de les garder.

Ce sont toutes des méthodes internes non documentées, mais nous avons opté pour les déconseiller pour le moment afin de maintenir une compatibilité ascendante Au cas où. Si certains d'entre vous les ont utilisés, vous pouvez maintenant simplement accéder aux propriétés à la place:

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

Autrement 

$this->router->class
12
Luis Chanferoni

En plus

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

Mettre à jour

La réponse a été ajoutée en 2015 et les méthodes suivantes sont obsolètes maintenant

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

Bonjour, vous devriez utiliser l'approche suivante

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

à cette fin, mais pour utiliser cela, vous devez étendre votre crochet à partir du CI_Controller et cela fonctionne comme un charme, vous ne devriez pas utiliser de segments uri 

4

Utilisez ce code n'importe où 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
3
Aslam Patel

Si vous utilisez $ this-> uri-> segment, si les règles de réécriture d'URL changent, la correspondance de nom de segment sera perdue.

3
monsterm

Le dernier segment de l'URL sera toujours l'action. S'il vous plaît obtenir comme ça: 

$this->uri->segment('last_segment');
0
PrakashG