Neden CodeIgniter değişkenleri geçirerek değil mi?

2 Cevap php

Possible Duplicate:
CodeIgniter Routing

Oluyor neler olmalıdır: kullanıcı URI gider, routes.php Devlet kapmak ve denetleyiciye gönderir, denetleyici bir veritabanı sorgu biraz bilgi verir. Çok temel şeyler.

Sorun: URI denetleyiciye değişken geçirmeden değildir. Ben söyledim oluyorum

Devletler için argüman 1 :: state_summary Eksik

Ben, yani işlevi argüman için bir varsayılan ayarlayabilirsiniz. ($ St = 'Alabama') ve her şey sorunsuz çalışıyor.

Ben bile bu nasıl mümkün olduğunu görmüyorum. Belki en azından ben hata izini test gerekenleri söyle.

URI:

http://example.com/index.php/states/Alabama

routes.php:

$route['states/(.*)'] = "states/state_summary/$1";

States controller:

...

function state_summary($st)
{
// DB query
// Return data
}

...

2 Cevap

Ben senin rota bu ayarlanabilir olması gerektiğine inanıyoruz:

$route['states/(:any)'] = "states/state_summary/$1";

That worked for me. I'm not sure if (.*) is valid as I've never seen it used.

Peki, yerine ben rsegment yöntemi kullanmak, parametre var denetleyici yazmak asla:

...

function state_summary()
{
  $st = trim($this->uri->rsegment(3));
  // DB query
  // Return data
}
...

Bu grubu, ben geçirilen parametre ile daha fazla kontrole sahip. Ben, Döşeme veya intval kullanarak dezenfekte önce modellemek veya kitaplık için iletebilirsiniz.

Ayrıca, url yönlendirme hakkında CodeIgniter çekirdek kütüphane bazı çimdik vardır. Dosyaya bak system/libraries/Router.php, içeride function _parse_routes() hatları 278 civarında kodu. It CI nasıl tanım yönlendirme eseridir.