4

PHPのmvcパターンに準拠したシステムを構築しました。コントローラとアクションは、アプリケーションのURLの一部です。だから私は持っている:mvcパターンで変数を渡す

www.example.com/controller/action/

をだから今、私は変数に渡す方法を探しています。フォームの場合はpostメソッドを使用しますが、別のページにリンクしてから、いくつかの変数を渡したいことがあります。

私はこれを行う方法に関するいくつかの提案をしたいと思います。私はZend Frameworkに、コントローラのアクションの後に、 "/"文字を区切り記号として使用して、キー/値の組み合わせとして変数があることを知っています。

www.example.com/controller/action/var1/value1/ var2/value2

これが最善の方法ですか?これは実際に私がそれが完了したことを知っている唯一の方法です。 私はそれを実装する簡単ではあるが良い方法を探しています。

ご提案は大歓迎です。

答えて

1

GETまたはPOSTのいずれかを使用して変数を渡すことができます。いずれかのきれいな形式で、URLに変数を追加します

GETは

/controller/action/var1/value1/var2/value2 

または前者の場合には伝統的な方法

/controller/action/?var1=value1&var2=value2 

は、あなたはまだにApacheのリライトルールを記述する必要があります変数をURLから抽出し、$ _REQUESTの一部として適切な変数セットを使用してコントローラ/アクションにルーティングします。

POSTを使用している場合、変数を渡す方法として、各フォームに隠し値を追加できます。

公開されたくない変数の場合は、Sessionsを使用してサーバー側に格納できます。

1

また、そのようなクエリGET行うことができます。

www.site.com/controller/action?var1=value1 & var2の= value2の

は、これらが$ _GETのスーパーグローバルに表示されますが。

3

var1/value1/var2/value2は実際には最良の方法ではなく、MVC controller/action/id構造を乱用します。デザインの再考が必要な場合は、POSTまたはクエリのパラメータを使用してください。ほとんどの場合、あなたが

/search/type/movie/format/divx/year/2000 

を持っている場合は、

/movie/divx?year=2000 

としてだからあなたmovieコントローラがdivx形式の動画を探しますし、多分ヘルパーやフィルタを使用することをやり直すことができ、たとえば、設計をやり直すことができまたはクライアント側のスクリプトを使用して、年== 2000に一致するムービーのみを表示します。私はそれとしてこれを好き

function action($id, $value){ 
    echo $id; // outputs 'foo' 
    echo $value; // outputs 'bar' 
} 

http://codeigniter.com/user_guide/general/controllers.html

:として

/controller/action/foo/bar/ 

が処理になるだろう - CodeIgniterのような

+0

私はcontroller/action/idを安らかに呼んでいません。 – troelskn

+0

これはMVCを読み込んでいるはずです。一定。 – aleemb

4

フレームワークには、変数名を開示することなく、あなたは、コントローラに変数を渡すことができますコントローラーが受け入れるパラメーターの数を制御できます。特定の変数が決して使用されないことが重要な場合は、ロジック適切にリダイレクトしてください。

1

プロジェクトによっては、PHPセッションを使用して値を設定したり読んだりすることもできます。これらの値は、スクリプトからGET値またはPOST値としてスクリプトに渡す必要はありません。下側(または上辺)の1つは、変数を単にURLの一部として渡すことはできない(またはブックマークした)ことです。

1

私が前に述べたキー/バリューのZendスタイルのアプローチは避けたいと思います。問題は、同じリソースを指している2つの異なるURLを作成することは自明になります。

http://www.example.com/controller/action/var1/value1/var2/value2 
http://www.example.com/controller/action/var2/value2/var1/value1 

これが機能する一方で、Webアプリケーション用のMVCスタイルのフレームワークの成功の一部は、きれいなURL構造を提供し、サイト上の単一のURLをすべてのリソースに関連付けることを容易にします。 var1/value1/var2/value2のアプローチでは、キー/値のクエリ文字列に対してほとんど利点がありません。

私はここに取ると思いアプローチが鍵を避けることであり、ただ単に値を使用してこれを行うことにより、配列

class example extends Controller{ 
    public function list($args){ 
     //$args[0] = 'value1'; 
     //$args[1] = 'value2';  
     //$args[2] = 'value3';    
    } 
} 

としてアクションメソッドに渡されます

http://www.example.com/example/list/value1/value2/value3 

システムのエンドユーザーに任せて、$ GETスタイル変数をどのように扱うかを決めると同時に、クリーンで安定した単一リソースのURLにつながるデザインを奨励します。

1

私のCakePHPプロジェクトで使用したいのは、 "named params"です。基本的に、私のURLは次のようになります。

http://example.com/controller/action/param1:value1/param2:value2 

あなたはCake's manualでいくつかのより多くの例を見ることができます。あなたのフレームワークがこれをサポートしているかどうかは分かりませんが、パン製造者がそれをした場合は、となります。 :-)

関連する問題