0

記事を何度も読んでいますが、まだ理解できない部分があります。記事へのリンク : Model-View-Confusion part 1: モデルが MVC のビューによってアクセスされる理由

以下のコードは、私が混乱していると思うものです。

class ListView extends View { 
    public $model; 
    public $template; 
    public $listTemplate; 
    public $errorTemplate; 
    public $itemName = 'items'; 


    public function output() { 
        $result = $this->model->findAll(); 
        if (count($result) > 0) { 
            $this->template = $this->getTemplate($this->listTemplate); 
            $this->template->addSet($this->itemName, $result); 
        } else { 
            $this->template = $this->getTemplate($this->errorTemplate);
        } 

        return $this->template->render(); 
    } 
}

コントローラーは次のようになります。

class UserController extends Controller { 
    public $viewName = 'ListView'; 

    public function showList() { 
        $this->view->model = $this->model->user; 
        $this->view->listTemplate = 'UserList.tpl'; 
        $this->view->errorTemplate = 'ErrorNoUsers.tpl'; 

    } 
}

私が理解できるように、 このように名前が付けられたメソッドで渡された名前付きtemplateから継承されたメソッドの結果に割り当てられましたViewgetTemplateViewlistTemplate$this->getTemplate($this->listTemplate)

私が混乱しているのは、$template突然メソッドがあったことです。つまり、クラスになります。ここ$this->template->addSet($this->itemName, $result);と `$this->template->render();

そこで何が起こったのか分かりますか?

4

1 に答える 1

0

まず、完全な開示: 私はその記事の著者です。

これは完全なコード ソリューションを意図したものではありませんでしたが、ほとんどの PHP コミュニティによって MVC であると主張されている PAC パターンの代わりに、完全な MVC 分離を適用する利点の例です。舞台裏でどのように機能するかは、この記事の範囲を超えています。ただし、それが示すはずだったのは、View がテンプレートをカプセル化する必要があるということです。この例では、テンプレート オブジェクトは、Smarty テンプレート、Twig インスタンス、またはその他のものである可能性があります。

後から考えると、ファイル名を参照する変数に「テンプレート」という名前を付けるべきではありませんでした。あなたが持っている混乱は理解できます: $this->listTemplate; テンプレートコードを含むファイルへの参照で、$this->template; listTemplate で参照されるファイルをロードするテンプレート オブジェクト (smarty、twig、その他のオブジェクト) のインスタンスです。

分かりやすいように修正してみます。私はそれを 2 年前に書きましたが、言い方を変えて、もう一度書いた場合に例でもう少しうまく説明したいことがいくつかあります。

于 2012-11-09T12:16:01.713 に答える