CodeIgniter: Denetleyici, İşlem, URL bilgileri nasıl alınır?


124

Şu URL’lere sahibim:

Bu URL'lerden denetleyici adı, eylem adı nasıl alınır. Ben CodeIgniter acemiyim. Bu bilgiyi almak için herhangi bir yardımcı işlev var mı

Ör:

$params = helper_function( current_url() )

Nerede $paramsböyle bir şey olur

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

Yanıtlar:


218

URI Sınıfını kullanabilirsiniz :

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

Ayrıca aşağıdaki çalışmayı da bana söylediler, ancak şu anda test edemiyorum:

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

çünkü denetleyicimin alt klasörü var, bu yüzden $ this-> uri-> segment (1), denetleyici adını döndürüyor olabilir. Yardımınız için teşekkürler, bilgileri almak için $ this-> router kullanıyorum.
noname.cs

2
Dizini doğru olarak almak için şunları da kullanabilirsiniz: $ this-> router-> fetch_directory ();
jmserra

6
Hey, Codeigniter 3 kullanıyorsanız, Denetleyici kullanımı için: $ this-> router-> class; Yöntem için: $ this-> router-> method; Dizin için: $ this-> yönlendirici-> dizin; Dokümantasyon: codeigniter.com/user_guide/installation/…
cartalot

$ this-> router-> FETCH_CLASS (); $ this-> router-> fetch_method (); işe yarıyor.
Dinesh Patra

133

URI segmentlerini kullanmak yerine şunu yapmalısınız:

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

Bu şekilde, yönlendirilmiş bir URL'nin arkasında, bir alt alanda vb. Olsanız bile her zaman doğru değerleri kullandığınızı bilirsiniz.


Bu yöntemi kullanarak, bir görünümü çağırırken doğru sınıf yöntemi adını alamayacağınızı yeni öğrendim modules::run('module/controller/action'). Sadece yüklenen sayfanın yönlendirici bilgilerini gösterir. Bunun üstesinden gelmenin herhangi bir yolu var mı?
Starx

Müthiş! Bunun ne kadar güvenli olduğuna dair bir haber var mı? Yani bu sahte olabilir mi?
HellaMad

Bu kabul edilen cevap olmalı - veya kısayolu kullanarak: $ this-> router-> class
ChristoKiwi

1
Route.php'deki yolları değiştirirseniz, $this->routerkodun çalıştığı sınıfı döndürür, ancak geçersiz kılma ile maskelenen gerçek yönlendiriciyi döndürmez. Her iki cevap da ne yapmak istediğinize bağlı olarak oldukça kullanışlıdır.
Tibor Szasz

Bu yöntemler tasnif edildi, kullanın $this->router->classve $this->router->methodbunun yerine
Richard

30

Yöntemler kullanımdan kaldırılmıştır.

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

Bunun yerine mülklere erişebilirsiniz.

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

Codeigniter kullanıcı kılavuzuna bakın

URI Yönlendirme yöntemleri fetch_directory (), fetch_class (), fetch_method ()

Özellikleri ile CI_Router::$directory, CI_Router::$classve CI_Router::$methodherkese açık olmasını ve kendi fetch_*()adil özelliklerini dönmek için başka artık yapıyor şey - bu onları tutmak için mantıklı değildir.

Bunların hepsi dahili, belgelenmemiş yöntemlerdir, ancak her ihtimale karşı geriye dönük uyumluluğu korumak için şimdilik bunları kullanımdan kaldırmayı seçtik. Bazılarınız bunları kullandıysa, artık bunun yerine mülklere erişebilirsiniz:

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


11

Ek olarak

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

Bu fetch_module()arama CI 2.1.2'de benim için çalışmıyor. /System/router.php dosyasında bulamıyorum.
tim peterson

1
@timpeterson, Yalnızca yanıtta belirtildiği gibi HMVC bileşeninde mevcuttur.
Starx

teşekkür ederim, beni kurtardın
Barbz_YHOOL

7

Güncelleme

Cevap 2015'te eklendi ve aşağıdaki yöntemler artık kullanımdan kaldırıldı

$this->router->fetch_class();  in favour of  $this->router->class; 
$this->router->fetch_method(); in favour of  $this->router->method;

Merhaba aşağıdaki yaklaşımı kullanmalısınız

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

bu amaçla, ancak bunu kullanmak için kancanızı kancadan uzatmanız gerekir CI_Controllerve bir tılsım gibi çalışır, uri segmentlerini kullanmamalısınız


3

$ This-> uri-> segment kullanıyorsanız, url yeniden yazma kuralları değişirse segment adı eşleşmesi kaybolacaktır.


3

Bu Kodu sınıfın veya kitaplıkların herhangi bir yerinde kullanın

    $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

1

URL'nin son segmenti her zaman işlem olacaktır. Lütfen böyle olsun:

$this->uri->segment('last_segment');

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

// denetleyicideki sınıfı sınıflandırma $ this-> router-> fetch_method ();

// yöntem


-4

denetleyici sınıfı herhangi bir işlev çalışmıyor.

bu yüzden aşağıdaki komut dosyalarını kullanmanızı tavsiye ederim

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

$ This-> router-> fetch_class () ve fetch_method () gibi önceden tanımlanmış işlevler var, o zaman manuel olarak yapmamıza gerek yok.
Naveed Ramzan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.