2010-01-14 17 views
101

que tienen estas URL:Como llegar controlador, acción, información de URL con CodeIgniter

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

Ex:

$params = helper_function(current_url()) 

Dónde $params se convierte en algo así como

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

Respuesta

176

podría utilizar el URI Class:

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

tengo También se le dijo que el siguiente trabajo, pero actualmente no puedo Prueba:

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

porque mi controlador tiene sub carpeta, por lo que $ this-> uri-> segmento (1) nombre del controlador de retorno quizá incorrecto. Gracias por su ayuda, uso $ this-> enrutador para obtener la información. –

+7

esa clase de enrutador funciona! Gracias. – joetsuihk

+2

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

124

En lugar de utilizar los segmentos URI que debe hacer esto:

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

Así, usted sabe que siempre pueda utilizar los valores correctos, incluso si está detrás de una URL enrutado, en un sub- dominio, etc.

+0

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

+0

¡Impresionante! ¿Alguna palabra sobre cuán seguro es esto? Es decir. ¿Esto puede ser falso? –

+3

Sí. Esta es la mejor solución. –

11

Como una adición

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

Esta llamada 'fetch_module()' no funciona para mí en CI 2.1.2. No puedo encontrarlo en el archivo /system/router.php. –

+0

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

9

Otra forma

$this->router->class 
+0

Esta es la respuesta más simple y limpia. ¡Votado! – ChristoKiwi

3

Si usa el segmento $ this-> uri->, si las reglas de reescritura de las URL cambian, se perderán los nombres de los segmentos.

4

Hola debe utilizar el siguiente enfoque

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

para este propósito, pero para usar este necesita extender su gancho de la CI_Controller y funciona como un encanto, no se debe utilizar segmentos de uri

17

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 codeigniter user guide métodos

URI Routing fetch_directory(), FETCH_CLASS(), fetch_method() Con propiedades CI_Router :: $ directorio, CI_Router :: $ clase y método CI_Router :: $ siendo pública y su búsqueda respectiva _ *() ya no hace nada más para devolver las propiedades, no tiene sentido guardarlas.

Todos estos son métodos internos no documentados, pero hemos optado por desaprobarlos por el momento para mantener la compatibilidad con versiones anteriores por si acaso.Si algunos de ustedes los utilizaron, a continuación, puede ahora sólo acceder a las propiedades en su lugar:

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

utilizar este código en cualquier lugar en la clase o bibliotecas

$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

clase controlador no está funcionando ninguna función.

por lo que recomiendo que utilice los siguientes scripts

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]; 
} 
+0

Hay funciones predefinidas disponibles como $ this-> router-> fetch_class() y fetch_method(), entonces no es necesario que lo hagamos manualmente. –

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

// clase fecth la clase de controlador de $ this-> router-> fetch_method();

// método

Cuestiones relacionadas