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', 
  '...'=>'...'
)
Foi útil?

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 e CI_Router::$method sendo público e seus respectivos fetch_*() 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];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top