1

アイテムのリスト2〜3アイテムをコントローラーのメソッドに渡す良い方法は何ですか?私はURLを使用することを考えていました....次のように:

   http://myserver/myapp/mycontroller/mymethod/parm1/parm2/listitem1/listitem2/listitem3

これを行うためのより良い方法はありますか?このデータはフォームからではなく、データベースクエリからのものであり、私はそれを使用してハイパーリンクを構築しています。

気になるのは、このURLを解析しているときに持っているアイテムの数が事前にわからないことだけだと思います。

何も得られないか、3つすべてまたはその間にある値が得られる可能性があります。したがって、このURLを解析する必要があるメソッドは、uri-> segment()がfalseを返すまでループを続け、最初の空のuriセグメントにヒットしたことを示します。任意の提案をいただければ幸いです。

ありがとう

編集1:

明確でない場合に備えて、私のモデルはデータベースからデータを取得しており、リストも作成します。問題は、実際には、不確定な数のURIセグメントを解析することです。これを行うためのより良い方法があるかどうか疑問に思っています。ありがとう!

編集2

これが私のMVCアプリを理解するのに役立ついくつかの情報です。私の問題は、誰が何をしているのかという点でコードを整理した方法ではないと思います。しかし、念のために...

モデルにmethodAがあり、データベースにクエリを実行して、コントローラーのlistitem1、listitem2、listitem2に返します。次に、コントローラーは次のようなURLを表す文字列を作成します。

  http://myserver/myapp/mycontroller/methodB/parm1/parm2/listitem1/listitem2/listitem3

次に、ビューは上記のURLを使用してハイパーリンクを表示します。ユーザーがこのハイパーリンクをクリックすると、methodBが呼び出されます。methodBでは、アイテムの数がわからないため、最初のfalseに到達するまで、すべてのセグメントをループします。

なぜこれを行う必要があるのか​​/私がしていること...ここにいくつかの背景情報があります:トランクと見なされるスイッチのポートのリスト(変更してはならないポート)をデータベースに照会します。これがメソッドAが行うことです。

methodBはスイッチに対してコマンドを実行し、大量のデータを返します。methodBからのデータを表示するビューにより、エンドユーザーはスイッチにさらに変更を加えることができます。methodBからのデータを表示する前に、methodAから取得したポートのリストを除外して、改ざんされないようにします。

お役に立てれば。

編集3

methodAとmethodBは、2つの異なる目的を果たすため、両方が必要です。methodAは、データベースのポートに関する要約データを表示します。methodAは、ドキュメントを表示する関数と考えてくださいスイッチについて。次に、methodAのビューは、実際のスイッチと通信するための「ライブ」リンクを提供します。これが、methodBの出番です。methodBは、これらのライブリンクのいずれかによってトリガーされ、メソッドAと同様にポートのリストを取得します。実際のものを表し、ポートに関するユーザー定義の情報は含まれていません。methodBをデータベースと通信させ、表示する前にそのデータをフィルタリングすることはできると思いますが、これら2つの関数を別々のAPIとして扱いたい場合は...別名-関数の1つのセットはデータベースからデータを取得し、もう1つのセットはスイッチと通信するためのツール...-それなら私は一方が他方と直接話したいとは思わない。GUIでそれらを結び付けてほしい。実際、私はデータベースインターフェイスと呼ぶもののために2つの別々のモデルとコントローラーを作成しました。次に、スイッチインターフェイス。これまでのところ、フォームのアイデアが最もエレガントなソリューションだと思います。読んでくれてありがとう。

4

3 に答える 3

1

listitemsの数をパラメーター3として配置します

../mymethod/parm1/parm2/numberofitems/listitem1/listitem2/listitem3 

必要に応じて1、2、または3を入れます。0が何も入れない場合(null)、ただし、nullが発生した場合にコントローラーが何をすべきかを知っていることを確認してください-アイテムを期待しないでください。

于 2012-09-25T20:34:16.273 に答える
0

データがクエリからのものである場合、アプリケーションを真にMVCに準拠させるには、CodeIgniterのモデル内にある必要があります。これは、アプリケーションの再構築を意味する場合があります。これは難しい場合がありますが、将来、すべてのデータベースクエリのモデルを作成することは非常に有益です。

ここでcodeigniterモデルを読むことができます:http: //codeigniter.com/user_guide/general/models.html

そして、ここでデータベースクラスを読むことができます:http://codeigniter.com/user_guide/database/index.html

私は本当にあなたがこれをすることを提案します。

データがすでにモデルからのものである場合は、モデルを含めることでデータを呼び出すことができます。

$this->load->model('model_name');
$response = $this->model_name->model_function(parameters);

編集:これにより、uriハックを理解しようとする代わりに、モデル関数から返された応答を単純に解析できるため、リストアイテムの数が不明であるという問題も解決されます。

于 2012-09-25T20:34:54.413 に答える
0

他のすべての答えと編集を読んだ後、それは間違いなくあなたがそれをしたい方法ではありません。

私があなたのコメントを誤解しない限り、ここに問題があります:ポートのリストはあなたのサーバーに保存されているドメインデータです。では、なぜそのデータを引き出してプレゼンテーション層に送信し、アプリケーションに直接送信するユーザーに表示するのでしょうか。仲介者をスキップして、「MethodB」にそのデータを取得させます。

「MethodB」は、必要な処理を行う前にこの情報自体を取得する必要があります。ドメインデータはドメインレイヤーに残り、ビューにはその情報が直接表示されることはありません(ユーザーには「MethodB」へのリンクが直接表示されます)。

または、DBスキーマがそのような結合に役立つ場合は、これをすべて1つのクエリで実行できます。

于 2012-09-25T21:05:30.183 に答える