2011-12-14 13 views
0

私はPHP MVCフレームワークで作業しています。本当にうまくいく。ビジネスレイヤー(モデル)とビジネスロジック(コントローラー)の分離が好きです。しかし、私はちょうど問題につまずいた。 userController.phpが呼び出されたこの場合 http://localhost/user/showall/MVC構造体のオブジェクトデータを取得

とそのファイル内で実行されます方法のshowallAction()があります:

が思う私は、次のURLに移動します。ここでのことです。

showallAction()メソッドでは、私は単に私のためにすべてのユーザーを取得するモデルに要求を行います。このような何か:

public function showallAction() 
{ 
    // create userModel object 
    $users = new userModel(); 

    // get all users and assign the data to a variable which can be accessed in the view 
    $this->view->users = $users->getAllUsers(); 

    // render views 
    $this->view->render(); 
} 

だから、この方法は、すべてのユーザーを取得し、変数にuserModelから返されたデータを割り当て、私は簡単に私の見解では、返されたデータを扱うことができます。 MVCの典型的なものです。

ここに問題があります。 ネイティブのiphone版も作成する必要があります。もちろん、見た目はまったく違うでしょう。

http://localhost/user/showall/

そして、それはちょうど私(JSON形式)の配列背中を与えること:だから私は実際に何をしたいすべてはこのURLを要求することです。だから私はそれをモバイル開発に使うことができます。

しかし、showallAction()メソッドは、Webブラウザの表示であることを前提としているため、これは今のところ明らかにできません。これは、JSONをフォーマットしてエコーしません。代わりに、単純にユーザーの配列を変数にアサートします。

これは、データを取得するために、特にモバイルデバイス用に別のメソッド "showallMobileAction()"を作成する必要があることを意味します。しかしこれは優雅な解決策ではありません。私はそれが良い方法だと確信しています...

誰でも私はこの問題を解決することができますか?

答えて

1

あなたの状況で私はルーティングメカニズムを変更します。

あなたは同じように、あなたが期待する形式を表しURLの終わりで拡張子を追加することができれば、有用であろう:

http://foo.bar/news/latest  >> HTML document 
http://foo.bar/news/latest.html >> HTML document 
http://foo.bar/news/latest.rss >> you RSS feed 
http://foo.bar/news/latest.json >> data in JSON format 

それが認識するように単純なパターンです。そして、後でこれを展開してdunno .. pdf出力、またはAtomフィードを追加することができます。

はまた、2件のコメント:

  1. モデルは、オブジェクトのタイプではありません。その代わりに、ビジネスロジックを担当するオブジェクトを含むレイヤー、およびデータの格納/取り出しを担当するオブジェクトのレイヤーです。

  2. ビューではドメインが(ビジネスロジックを担当するオブジェクト)をオブジェクトに結合した、本格的なオブジェクトでなければなりません。

+0

これは実行可能な解決策のようです。 .htmlや.jsonのようなURLに拡張子を付けることは私にとっては問題ではありません。しかし、私はそれの後に何をしますか? baseControllerに格納されているURLに渡された拡張子があるとします。$ urlExt; ---これは、$ urlExtの型をチェックするすべてのAction()メソッド(たとえば、userController内)でチェックを作成する必要があるのでしょうか? – w00

+0

@ w00では、拡張子に基づいて異なる出力を与えるためにビューを変更する必要があります。別のViewインスタンスを初期化するか、または実際に出力をレンダリングすることを直接担当する他のオブジェクトを渡します。 この部分は、独自のMVCパターンの実装と密接に関連しています。 –

0

あなたのURLにパラメータを渡すことができます。

/user/showall/json 

を、カスタム関数または組み込みの1と第三URLセグメントを取得します。たとえば、CodeIgniterの場合:$this->uri->segment(3)です。 一部のフレームワークは、追加のパラメータをメソッドに渡します。私はPHPのMVCに慣れていないんだが、一般的に、私はどちらか「text/htmlの中に応答を要求するために、HTMLヘッダフィールドを「受け入れる」を使用したい

public function showallAction() 
{ 
    print_r(func_get_args()); 
} 
0

:ちょうど私は上に書いたURLでこれを試してみてください"または" text/json "の場合、コントローラはaccepts型をチェックし、それに応じて応答を返します。

関連する問題