CodeIgniter: cómo obtener controlador, acción, información de URL

4 minutos de lectura

avatar de usuario
noname.cs

Tengo estas URL:

Cómo obtener el nombre del controlador, el nombre de la acción de estas URL. Soy novato en CodeIgniter. ¿Hay alguna función auxiliar para obtener esta información?

Ex:

$params = helper_function( current_url() )

Dónde $params se convierte en algo como

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

avatar de usuario
Sansón

Podrías usar el Clase URI:

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

También me dijeron que lo siguiente funciona, pero actualmente no puedo probar:

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

  • porque mi controlador tiene una subcarpeta, entonces $this->uri->segment(1) el nombre del controlador de retorno puede ser incorrecto. Gracias por su ayuda, uso $this->router para obtener la información.

    – noname.cs

    14 de enero de 2010 a las 4:32

  • Para obtener el directorio correctamente, también puede usar: $this->router->fetch_directory();

    – jmserra

    8 oct 2013 a las 16:01


  • Oye, si estás usando Codeigniter 3, entonces para el uso del controlador: $this->router->class; para Método: $este->router->método; para Directorio: $este->router->directorio; Documentación: codeigniter.com/user_guide/installation/…

    – cartalot

    23 mayo 2016 a las 21:55

  • $este->router->fetch_class(); $este->router->fetch_method(); funciona.

    -Dinesh Patra

    17 de marzo de 2017 a las 11:55

En lugar de usar segmentos de URI, debe hacer esto:

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

De esa forma, sabrá que siempre está utilizando los valores correctos, incluso si está detrás de una URL enrutada, en un subdominio, etc.

  • Acabo de descubrir que al usar este método, no puede obtener el nombre correcto del método de clase al llamar a una vista como modules::run('module/controller/action'). Simplemente muestra la información del enrutador de la página cargada. ¿Hay alguna manera de superar esto?

    – Starx

    13 de febrero de 2012 a las 7:26


  • ¡Impresionante! ¿Alguna palabra sobre qué tan seguro es esto? Es decir, ¿esto puede ser falsificado?

    – HellaMad

    13 de marzo de 2013 a las 1:14

  • Esta debería ser la respuesta aceptada, o usando el atajo: $this->router->class

    – Christo Kiwi

    15/03/2015 a las 23:42

  • No si cambias las rutas en route.php, $this->router devuelve la clase en la que se ejecuta el código, pero no el enrutador real enmascarado con la anulación. Ambas respuestas son bastante útiles según lo que quieras hacer.

    –Tibor Szasz

    19 de enero de 2016 a las 11:08

  • Estos métodos han sido obsoletos, use $this->router->class y $this->router->method en cambio

    – Ricardo

    16 de enero de 2017 a las 7:14

avatar de usuario
lumos0815

Los métodos están en desuso.

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

Puede acceder a las propiedades en su lugar.

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

Ver guía de usuario de codeigniter

Métodos de enrutamiento URI fetch_directory(), fetch_class(), fetch_method()

Con propiedades CI_Router::$directory, CI_Router::$class y
CI_Router::$method siendo públicos y sus respectivos fetch_*() ya no hace nada más para devolver las propiedades; no tiene sentido conservarlas.

Esos son todos métodos internos no documentados, pero hemos optado por desaprobarlos por ahora para mantener la compatibilidad con versiones anteriores por si acaso. Si algunos de ustedes los han utilizado, ahora pueden simplemente acceder a las propiedades en su lugar:

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

De otra manera

$this->router->class

como una adición

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

  • Este fetch_module() call no me funciona en CI 2.1.2. No puedo encontrarlo en el archivo /system/router.php.

    – tim peterson

    27 de agosto de 2013 a las 12:53


  • @timpeterson, solo está disponible en el componente HMVC como se indica en la respuesta.

    – Starx

    27/08/2013 a las 18:00

Actualizar

La respuesta se agregó en 2015 y los siguientes métodos están obsoletos ahora

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

Hola, deberías usar el siguiente enfoque.

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

para este propósito pero para usar esto necesitas extender tu gancho desde el CI_Controller y funciona de maravilla, no debes usar segmentos uri

  • Este fetch_module() call no me funciona en CI 2.1.2. No puedo encontrarlo en el archivo /system/router.php.

    – tim peterson

    27 de agosto de 2013 a las 12:53


  • @timpeterson, solo está disponible en el componente HMVC como se indica en la respuesta.

    – Starx

    27/08/2013 a las 18:00

avatar de usuario
monstruo

Si usa $this->uri->segment , si las reglas de reescritura de URL cambian, se perderá la coincidencia de nombres de segmentos.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad