CodeIgniter: ¿Cómo conseguir controlador, acción, información de URL
-
20-09-2019 - |
Pregunta
Tengo estas URL:
Cómo obtener el nombre de controlador, nombre de la acción de estas URL. Estoy CodeIgniter novato. ¿Hay alguna función auxiliar para obtener esta información
Ejemplo:
$params = helper_function( current_url() )
Cuando $params
se convierte en algo así como
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
Solución
Se puede utilizar el URI Clase :
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
También he sido informado de que el siguiente trabajo, pero soy actualmente incapaz de prueba:
$this->router->fetch_class();
$this->router->fetch_method();
Otros consejos
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 subdominio, etc.
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;
métodos URI de enrutamiento fetch_directory (), FETCH_CLASS (), fetch_method ()
Con propiedades
CI_Router::$directory
,CI_Router::$class
yCI_Router::$method
siendo pública y sus respectivosfetch_*()
sin ya hacer cualquier otra cosa que acaba de regresar las propiedades - no lo hace tener sentido para mantenerlos.Estos son todos los métodos internos, sin papeles, pero Decidio despreciar por ahora con el fin de mantener la compatibilidad con versiones anteriores por si acaso. Si algunos de ustedes los utilizaron, entonces ahora sólo puede acceder a las propiedades en su lugar:
$this->router->directory; $this->router->class; $this->router->method;
Otra forma
$this->router->class
Como una adición
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
Actualizar
Se añadió la respuesta fue en 2015 y los métodos siguientes están en desuso ahora
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
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 URI
Si usando $ this-> uri-> segmento, si las direcciones URL reescritura de las reglas cambian, nombre segmentos juego se perderán.
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
último segmento de la URL será siempre la acción. Por favor, póngase como esto:
$this->uri->segment('last_segment');
$this->router->fetch_class();
// clase fecth la clase en el controlador $ This-> router-> fetch_method ();
// método
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];
}