CodeIgniter: como obter informações de controlador, ação, URL
-
20-09-2019 - |
Pergunta
Eu tenho esses URLs:
Como obter o nome do controlador, o nome da ação desses URLs. Eu sou o CodeIgniter Newbie. Há alguma função auxiliar para obter esta informação
Ex:
$params = helper_function( current_url() )
Onde $params
se torna algo como
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
Solução
Você poderia usar o Classe URI:
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
Também me disseram que o trabalho a seguir, mas atualmente não posso testar:
$this->router->fetch_class();
$this->router->fetch_method();
Outras dicas
Em vez de usar segmentos URI, você deve fazer isso:
$this->router->fetch_class(); // class = controller
$this->router->fetch_method();
Dessa forma, você sabe que está sempre usando os valores corretos, mesmo se estiver por trás de um URL roteado, em um subdomínio, etc.
Os métodos são preteridos.
$this->router->fetch_class();
$this->router->fetch_method();
Você pode acessar as propriedades.
$this->router->class;
$this->router->method;
Ver Guia do usuário do CodeIgniter
Métodos de roteamento URI Fetch_Directory (), Fetch_class (), Fetch_method ()
Com propriedades
CI_Router::$directory
,CI_Router::$class
eCI_Router::$method
sendo público e seus respectivosfetch_*()
Não fazendo mais nada para retornar as propriedades - não faz sentido mantê -las.Todos esses são métodos internos e não documentados, mas optamos por depreciá-los por enquanto, a fim de manter a compatibilidade com antecedência apenas por precaução. Se alguns de vocês os utilizaram, agora você pode acessar as propriedades:
$this->router->directory; $this->router->class; $this->router->method;
Outra maneira
$this->router->class
Como uma adição
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
Atualizar
A resposta foi adicionada foi em 2015 e os seguintes métodos são preteridos agora
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
Oi você deve usar a seguinte abordagem
$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action
Para esse fim, mas para usar isso, você precisa estender seu gancho do CI_Controller
E funciona como um charme, você não deve usar segmentos de URI
Se você estiver usando o segmento $ this-> Uri->, se as regras de reescrita de URLs mudarem, a correspondência de nomes dos segmentos será perdida.
Use este código em qualquer lugar da aula ou 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
O último segmento de URL sempre será a ação. Por favor, entenda assim:
$this->uri->segment('last_segment');
$this->router->fetch_class();
// Classe Fecth a classe no controlador $ this-> roteador-> fetch_method ();
// Método
A classe do controlador não está funcionando nenhuma função.
Então eu recomendo que você use os seguintes 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];
}