web-dev-qa-db-ja.com

2つのパラメーターをコントローラーにルーティングする方法は?

これは本当に基本的なように思えますが、私はそれにこだわることができません。

次のように、コントローラーのメソッドに複数のパラメーターを送信しようとしています:

http://localhost/ci/index.php/subjects/3/state

これは私が試したルーティングです:

$route['subjects/(:num)'] = 'subjects/view/$1';
$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';

メソッドは2つのパラメーターを受け入れました。

public function view($slug, $id = null){

}

しかし、私は404を取得しているようです。これをどのように機能させることができますか?私は常に1つのパラメーターとオプションの他のパラメーターを受け入れるためにビューメソッドが必要です。

[〜#〜] note [〜#〜]:URLヘルパーを含めています。

21
eric.itzhak

ルートブラケットに問題がある場合は、{}から()ブラケットに変更するだけで機能します

から

$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';

$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';
39
umefarooq

ルーティングルールを常に維持する

お気に入り

$route['subjects/(:num)/(:any)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3/$4';
$route['subjects/(:num)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3';
$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';

ルーティングのために常にこのパターンに従います

このように追加すると

$route['subjects/(:num)/(:any)'] = 'subjects/view/$1/$2';
$route['subjects/(:num)/(:any)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3/$4';
$route['subjects/(:num)/(:any)/(:any)'] = 'subjects/view/$1/$2/$3';

その後、常に最初の条件が常に真になります。

このリンクも参照してください-> codeigniter routing rules

7
PHP Team

このURIパターンを試したことがあります

$route['(:any)'] = 'welcome/list1/$1';
$route['(:any)/(:num)'] = 'welcome/list1/$1/$2';

$route['(:any)/(:any)'] = 'welcome/list2/$1/$2';
$route['(:any)/(:any)/(:num)'] = 'welcome/list2/$1/$2/$3';

$route['(:any)/(:any)/(:any)'] = 'welcome/list3/$1/$2/$3';

しかし、それはうまくいきませんでした...ので、私は正規表現に置き換えました

([a-z 0-9 -]+)置換(:any)および([0-9]+)置換(:num)

それで

$route['([a-z 0-9 -]+)'] = 'welcome/list1/$1';
$route['([a-z 0-9 -]+)/([0-9]+)'] = 'welcome/list1/$1/$2';

$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)'] = 'welcome/list2/$1/$2';
$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)/([0-9]+)'] = 'welcome/list2/$1/$2/$3';

$route['([a-z 0-9 -]+)/([a-z 0-9 -]+)/([a-z 0-9 -]+)'] = 'welcome/list3/$1/$2/$3';

そしてそれは私のために働いた:)

2
Ankur Singh