3

Zend Framework2 のチュートリアルを読んだ後、これは疑問に思っていますが、おそらく一般的な MVC ロジックに適用されます...

チュートリアルの例では、追加ビュー ( ) を作成し、その後、多くのコードが複製されmodule/Album/view/album/album/add.phtmlた編集テンプレート ( ) を作成します。module/Album/view/album/album/edit.phtml編集スクリプトには基本的に、提供された ID をチェックする追加のロジックがありますが、ユーザーには同じフォームが表示されます。

さて、MVC 規則を完全には使用していない同様のケースでは、追加オプションと編集オプションの両方を処理するスクリプトを作成します。ID が指定された場合、ロジックは「編集」アクションを想定し、その ID のデータベース レコードを取得してフォーム フィールドに入力しようとし、無効な ID が指定された場合はエラーを返します。

MVC への教科書的なアプローチは、アプリケーション全体のすべてのデータベース対話に対してこのアプローチに従う場合、実際には DRY 原則をうまくカプセル化していないように思われます。

私はまだいくつかの MVC の概念に頭を悩ませようとしていますが、命名規則以外に、編集アクションと追加アクションが同じビュー テンプレートを使用できない (または使用すべきでない) 理由はありますか?

チュートリアルに示されているように、テンプレート名を期待するようにルーティングが設定されていることがわかりますが、共通フォームをレンダリングするビュー テンプレートを呼び出して、それをおよびprocess.phtml内に含めることができます。それは賢明なアプローチですか?解決策としてそれを避けるべきいくつかの理由はありますか?add.phtmledit.phtml

4

4 に答える 4

2

現時点では、あなたの意見の違いadd/editはわずかなので、両方を同じ意見で見たくなるでしょう。

しかし、より大きな問題は、どれくらいの間、違いが小さなものになるかということです. 機能のいくつかの追加/変更、あちこちの微調整、そしてそれらの違いはそれほど小さくありません。

IMO、これらは2つの別個の機能であるため、読みやすさとメンテナンスの観点から、別個の懸念事項(ビュー)に保持する必要があります。

于 2013-03-28T07:07:04.210 に答える
1

違いが小さい場合は、編集用と追加用に別々のビューを用意する必要はありません。

  1. レコードIDに隠しフィールドを使用し、編集の場合はその値を設定し、追加の場合は値を空白に設定します
  2. 編集の場合はレコードの詳細を取得し、編集の場合は取得したレコード データを入力フィールドに入力します。

Zend では、次のような 2 つのアクションに同じビューを設定できます。

$view = new ViewModel(array('variable'=>$value));
    $view->setTemplate('module/controler/action.phtml'); // path to phtml file under view folder
    return $view;
于 2013-03-28T06:53:39.277 に答える
0

Albums チュートリアルを最初に書いたとき、ユーザーが MVC とそれが Zend Framework でどのように機能するかを理解するのを助けるために、独自のビューで 2 つの別々のアクションを示すことは役に立ちました。

私自身のアプリケーションでは、CRUD タイプで追加と編集を処理するアクションとビューが 1 つあります。他の人が指摘しているように、違いは些細なことだからです。追加と更新が大幅に異なる場合があります。そういう場合は別れます。

于 2013-03-28T07:38:08.790 に答える
0

編集テンプレートを使用したくない場合は、編集テンプレートを使用する必要はありません。追加と編集の両方で、同じテンプレートを使用してコードの重複を避けることができます。追加と編集の両方に同じテンプレートを使用する場合は、指定したテンプレートをレンダリングすることで実行できます。

例:

$this->_helper->viewRenderer('add');
$this->view->mode           =   'edit';

ここで add.phtml は編集アクションでレンダリングされ、mode は操作が編集モードであることを指定し、追加/編集モードに基づいてテンプレートに必要な変更を加えます。それだけです。

于 2013-03-28T06:52:17.203 に答える