2010-11-21 10 views
3

私は現在CodeIgniterを使用しています。CodeIgniter - 無制限のパラメータですか?

私は、パラメタを無制限に使用できる関数を記述しようとしています。

だから、コントローラには

function test($name, $others){ 
    foreach($others){ 
     //do something 
    } 
} 

のようなものだろうと私は私がこれを設定するにはどうすればよい

example.com/control/test/some name/param1/param2/param3/param4/param5... 

のようにそれを呼び出すことができますか?

答えて

6

uri_to_assoc関数を使用して、関連するURIセグメントの配列を取得できます。だからあなたのコントローラでは、あなたがこのような何かを行う可能性があります:

function test($name){ 
    $uri_seg = $this->uri->uri_to_assoc(4); 

    foreach($uri_seg as $para){ 
     // Do something with each of the URI segments passed in here after $name 
    } 
} 
+0

乾杯、 非アソッシュ配列を取得する人はいますか? 'array( 'param1'、 'param2'、 'param3'、 'param4'、 'param5');'? – Hailwood

+1

@Haiwood私は 'segment_array()'関数はそれを行うべきだと思います –

+0

なぜPHPのネイティブ[func_get_args](http://php.net/manual/en/function.func-get-args.php) – dsdsdsdsd

6

あなたも、このようにそれを行うことができます:

function foo($params=array()) 
{ 
    $params=func_get_args(); 
    //print_r($params); 
} 

そうのような任意のURL:

site.com/controller/foo/param1/param2/param3/param4

を作成しますパラメータの配列

0

なぜ無制限(可変)の引数が必要なのかは明らかではありませんが、なぜ必要なのかを考えてみてください。

特定のタイプの引数に代替URIセマンティクスを使用できます。多くの場合、URIデザインはシステム内のものへのパスです。無制限のパラメータはリソースを参照するのではなく、その属性を記述することができます。タグはこれの良い例です。

/chicken/red+tall+fat 

タグは、単一のパラメータでCodeIgniterに簡単に実装されます。

/hen-house.bunk4.topshelf/chicken 

あるいは、階層はパスとして重要であるならば、あなたは上記のfunc_get_args()ソリューションを使用することができます。パラメータは、ノードを参照している場合

することは、あなたが同様のアプローチを検討することができます。

+0

と例:あなたのアプリケーションにはリスト(販売する家のリスト)があり、html UIはユーザがキーワード(例:ガレージ、2ベッドルーム、バルコニー、中央の空気、暖炉など)でリストをフィルタリングすることを許可します。これらのフィルタワードをURLに割り当てることができれば、フィルタリングされたリストへのリンクを簡単に送ることができます( 'www.example.com/garage/2bedrooms/balcony/central air/fireplace') – dsdsdsdsd

関連する問題