2011-06-22 10 views
1

次のように私はルートへのURLをしようとしています:CodeIgniterのルーティング(正規表現)

some_controller::method($param)

にマッピングされ

domain.com/param/some_controller/method/

私は正規表現を習熟していないよ、私は誰かが私を始めるのを手伝うことができたら、本当に感謝していますか?または、良いチュートリアルやサンプルを教えてください。

+0

次のようになります

$route['(:num)/blog/entry/'] = "blog/view/$1"; class Blog extends CI_Controller { function view($id) { echo 'fetching blog entry no ' . $id; } } 

は 'domain.com/paramです/ some_controller/method/'populの文字列特定の変数にated?同様に、 'http(s)://'プロトコルが決してそこに存在しないと仮定することができ、文字列は常にその正確な形式であるかどうか? (私はCIに精通していません) – Wiseguy

+0

@Wiseguy - そのすべてがCIによって処理されます。また、いくつかの書き換えルールがありますので、URLは_actually_domain.com/index.php?param/some_controller/method' – tbridge

答えて

0

同じ効果を、しかし、CodeIgniterのスタイルは:

//remember that custom routes need to go _after_ ci's default routes, as they're executed in the order you provide them 
$route['default_controller'] = "welcome"; 
$route['404_override'] = ''; 
//exception 1 to your regex here 
//exception 2 to your regex here 
//so on... 
$route['(:any)/(:any)/(:any)'] = "$2/$3/$1"; 
1

これは現在、混乱せずにルーティングでこれを行う方法がないため、少し面倒です。これを試すことができます:

$route['([^/]+)/([^/]+)/([^/]+)'] = "$2/$3/$1"; 

しかし、これはどんなURLにも適用されると言います。これは通常のコントローラを混乱させます。あなたはより良いあなたがこのルートで処理しなければならない要求を識別するために、いくつかの接頭辞を追加提供しています。たとえば

$route['a/([^/]+)/([^/]+)/([^/]+)'] = "$2/$3/$1"; 
+0

ですもし私がちょうどこの上のすべての定期的なコントローラを注文するのですか?彼らは一致する最初のルートにかかるのではないのですか? – tbridge

+0

もしあなたがこれ以上上になる可能性のあるすべてのURLをリストアップすれば、はいです。それはURLの多数の痛みであるように思えますが、あなたが5または10、あるいは20の場合でも恐ろしいことはありません。 – Femi

+0

@ Femi - Yea、おそらく5未満、おそらくこのルートへの2,3の例外のみ!すぐにあなたの方法を試してみます – tbridge

2
$route['(:any)/some_controller/method/'] = "some_controller/method/$1"; 

はあなたのparamが多数ある場合代わりに(:num)を使用してください。お使いのコントローラ

function method($my_param) { 
    echo 'my param is '. $my_param; 
} 

RLの例では

:あなたのビューが

view.php

<html> 
<body> 
link to <?= anchor('1/blog/entry/','my first post'); ?> 
link to <?= anchor('2/blog/entry/','my second post'); ?> 
</body> 
</html>