0

私のMVCでは、配列を使用してモデルからのデータをフォームに入力します。私はPDOを使用して連想配列をフェッチしています。これにより、ビューにデータを入力するために使用できるフィールドの配列が得られます。

ユーザーが新しいレコードを要求すると、配列は空になり、使用する前にすべての変数の値を明示的にテストしない限り、スクリプトは存在しないインデックスでフォールオーバーします。

以前の私のアプローチは、新しいレコードの場合、空の配列を設定してこれをビューに渡すことでした。これは単純なフォームには問題ありませんが、ビューで10〜15個の変数を使用する必要がある場合、これは少し面倒です。

これを行うための好ましい方法は何ですか?ビューで使用する前にすべてのフィールドをテストする必要がありますか、それとも空の配列を作成する必要があります。もしそうなら、空のアレイをコントローラーまたはモデルに作成する必要がありますか?


例として、ユーザーが既存のレコードを編集したい場合、コントローラーはID番号をモデルに渡し、レコードの現在の値の配列を要求します。

コントローラはこの配列をビューに渡し、ビューは値を編集用のフォームに組み込みます。

対照的に、コントローラーは新しいレコードの要求を受信すると、モデルが新しいため、モデルにレコードを要求しても意味がないことを認識します。渡された配列にはフォームに必要なキーが含まれていないため、ビューを呼び出すことはできません。

これに対する私の現在のアプローチは、空のキーの配列を初期化することですが、モデルが変更された場合に維持する必要があるため、これは退屈で時間の浪費であり、エラーが発生しやすいようです。

例えば:

$this->view->class['Code']=NULL;
$this->view->class['Description']=NULL;
$this->view->class['Image']=NULL;
$this->view->class['Judge']=NULL;
$this->view->class['Entries']=NULL;
$this->view->class['Absentees']=NULL;

より良い方法が必要ですか?

4

2 に答える 2

0

これは、MVCの設計が不十分な場合の一種のバンドエイドですが、次のような関数を使用できます。

function idx(&$array, $index = 0, $default = null) {
  return isset($array[$index]) ? $array[$index] : $default
}

あなたが通常した場合のビューで$class['Description']

あなたは今使うでしょうidx($class, 'Description')


モデルの各属性を個別に渡す必要はありません。代わりに、モデルオブジェクト全体を渡して、ビューからアクセスします。例:

$this->view->entry = $myModelInstance;ここで、は、Code、Description、Image、Judgesなどの属性を持つクラス$myModelInstanceのインスタンスまたはクラスです。Entry

次に、ビューで、次のようなものを使用します$entry->Description

于 2013-01-06T23:39:09.573 に答える
0

私の意見では、適切なデフォルトの設定はモデルの問題です。

次のようなクラスを想像してみてください。

class Car {

    protected $color;

    protected $vendor;


    public function __construct($color, $vendor) {
        $this->color = $color;
        $this->vendor = $vendor;
    }


    public static function getDefault() {
        return new Car('unknown', 'unknown');       
    } 

}

でも。配列を使用するとおっしゃいました。配列についても同様の方法があります。のような関数を記述して、コードのモデル部分にgetDefaultWhatever()配置することをお勧めします。

于 2013-01-06T22:32:03.817 に答える