CodiceIgniter:Come ottenere informazioni su controller, azione e URL
-
20-09-2019 - |
Domanda
Ho questi URL:
Come ottenere il nome del controller e il nome dell'azione da questi URL.Sono un principiante di CodeIgniter.Esistono funzioni di supporto per ottenere queste informazioni
Ex:
$params = helper_function( current_url() )
Dove $params
diventa qualcosa di simile
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
Soluzione
È possibile utilizzare il URI Classe :
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
Ho anche stato detto che il seguente lavoro, ma sono attualmente in grado di prova:
$this->router->fetch_class();
$this->router->fetch_method();
Altri suggerimenti
Invece di usare segmenti URI si dovrebbe fare questo:
$this->router->fetch_class(); // class = controller
$this->router->fetch_method();
In questo modo si sa che si sta per utilizzare i valori corretti, anche se ci si trova dietro un URL routing, in un sottodominio, ecc.
I metodi sono obsoleti.
$this->router->fetch_class();
$this->router->fetch_method();
È possibile accedere alle proprietà, invece.
$this->router->class;
$this->router->method;
metodi URI Routing fetch_directory (), fetch_class (), fetch_method ()
Con le proprietà
CI_Router::$directory
,CI_Router::$class
eCI_Router::$method
essere pubblico e il loro rispettivofetch_*()
no più fare qualsiasi altra cosa per tornare solo le proprietà - non lo fa senso per tenerli.Questi sono tutti i metodi, senza documenti interni, ma abbiamo scelto di li deprecate per ora al fine di mantenere la retrocompatibilità nel caso in cui. Se qualcuno di voi li hanno utilizzato, allora si può ora solo accedere alle proprietà invece:
$this->router->directory; $this->router->class; $this->router->method;
Un altro modo
$this->router->class
Come aggiunta
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
Aggiorna
La risposta è stata aggiunta è stato nel 2015 e le seguenti metodi sono obsoleti ora
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
Ciao si dovrebbe usare il seguente approccio
$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action
per questo scopo, ma per utilizzare questo è necessario estendere il vostro gancio dalla CI_Controller
e funziona come un fascino, non si dovrebbe usare segmenti URI
Se si utilizza $ this-> uri-> segmento, se gli URL riscrittura regole cambiano, nome segmenti corrispondenza sarà perso.
utilizzare questo codice in qualsiasi classe o librerie
$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
Ultimo segmento del URL sarà sempre l'azione. Si prega di ottenere in questo modo:
$this->uri->segment('last_segment');
$this->router->fetch_class();
// classe fecth la classe controller $ This-> router-> fetch_method ();
// metodo
classe controller non funziona alcuna funzione.
quindi vi consiglio di utilizzare i seguenti script
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];
}