モバイルデバイス用に異なるビューを表示する必要があり、単純なJSON-APIを提供したいと思います。 私はこの状況で私を助けるいくつかの状況に応じて異なるビューをロードするKohana Frameworkのための少しのモジュールを書いた:https://github.com/ClaudioAlbertin/Kohana-View-Factory異なる出力フォーマットまたはデバイスタイプの管理
しかし、私は非常に満足していないさまざまなデバイスタイプのアセットです。また、JSONビューでJSONを出力しても、それはまだすべてのHTMLテンプレートにラップされています。 今、もっと良い解決策を探しています。 MVCアプリケーションでさまざまな出力フォーマットやデバイスタイプをどのように扱いますか?
私は考えました。コントローラーを2つのコントローラー(データコントローラーと出力コントローラー)に分けるだけでした。
- データコントローラが取得し、設定データをモデルの助けを借りて、それはモデルからデータを取得し、以降のビューに渡されるデータオブジェクト に書き込む すべての検証等を行います。
- 出力コントローラはビューをロードし、データコントローラにデータオブジェクトを与えます。各フォーマットまたはデバイスタイプの出力コントローラがあります。モバイルデバイス用の出力コントローラは、モバイルビューを読み込んで、すべてのモバイルバージョンのスタイルシートとスクリプトを追加することができます。 JSON出力コントローラは、HTMLテンプレートのすべてのものを使わずにビューをロードし、データをJSONに変換できます。
少し例:
<?php
class Controller_Data_User extends Controller_Data // Controller_Data defines a data-object $this->data
{
public function action_index()
{
$this->request->redirect('user/list');
}
public function action_list()
{
$this->data->users = ORM::factory('user')->find_all();
}
public function action_show($id)
{
$user = new Model_User((int) $id);
if (!$user->loaded()) {
throw new HTTP_Exception_404('User not found.');
}
$this->data->user = $user;
}
}
class Controller_Output_Desktop extends Controller_Output_HTML // Controller_Output_HTML loads a HTML-template
{
public function action_list($data)
{
$view = new View('user/list.desktop');
$view->set($data->as_array());
$this->template->body = $view;
}
public function action_show($data)
{
$view = new View('user/show.desktop');
$view->set($data->as_array());
$this->template->body = $view;
}
}
class Controller_Output_JSON extends Controller_Output // Controller_Output doesn't load a template
{
public function action_list($data)
{
$view = new View('user/list.json');
$view->users = json_encode($data->users->as_array());
$this->template = $view;
}
public function action_show($data)
{
$view = new View('user/show.json');
$view->user = json_encode($data->user);
$this->template = $view;
}
}
あなたはどう思いますか?
モバイルサイトがほしいからです。これは異なるビュー(HTML)と異なるアセット(スタイルシート、スクリプト...)が必要です。また、HTMLテンプレートと特別なビューを必要とせずに資産を必要としないJSONとしてデータを取得する簡単な方法が必要です。 HTMLテンプレートをロードするがJSONを出力したい "Controller_Template_HTML"を継承するのは意味がありません。しかし、データの取得と設定はすべて同じですから、私はこれらの2つのタスクを分割すると考えました。私のモジュールでは、モバイルビューに別のアセットを設定することもできません。 –
これはもう古典的なMVCではなく、既存のMVCフレームワーク(少なくともKohanaで)に簡単に統合できるサブパターンのようなものです。 –