1

私は周りを見回しましたが、せいぜいZend 1でこれに関するリンクがいくつかあります。私が見つけた最良の解決策は

// controller:
return array('viewValue' => 'something');
// layout.phtml
$children = $this->viewModel()->getCurrent()->getChildren();
$viewValue = $children[0]->viewValue;

レイアウトですが、少しぎこちないようです。get_class_methodsレイアウトで行うとviewModel()メソッドが表示されないため、さらに奇妙です。基本的に、私は API (およびソース コード) を調べましたが、あまり見つかりませんでした。Zend 1 もより多くのアクセス権を持っているようです。一部の古いソリューションでは、ビューを取得して直接変更する必要がありましたが、Zend 2 では新しい配列 (またはビュー モデル) を返します。任意のヒント?

その理由については、jQuery モバイル レイアウトを使用しています。したがって、見出しはコンテンツから分離されていますが、構造は同じでなければなりません (レイアウトに属している必要があります)。

4

2 に答える 2

4

ビュー モデルは階層的に構築されます。最上位のビュー モデルは「レイアウト」であり、コントローラーがディスパッチされた後に子ビュー モデルが挿入されます。これは、アプリケーションのモデルのかなりのツリーを構築できることを意味します。

最上位のビュー モデル (つまり、レイアウトを表すモデル) もMvcEvent. そのオブジェクトは、ブートストラップ中にアプリケーションに渡されますが、コントローラーの初期化時にコントローラーにもリンクされます。

MvcEvent は$this->getEvent()、コントローラのビュー モデルでアクセスできます$event->getViewModel()。簡単に言うと、次のようにします。

controller MyController
{
  public function myAction()
  {
    $this->getEvent()->getViewModel()->foo = 'bar';
  }
}

そしてあなたのlayout.phtmlで:

<?php echo $this->foo; ?>
于 2013-01-06T10:01:21.547 に答える
1

これはほとんど、それがどのように行われるかです。新しいZend\View-Components は、お互いにネストされたほぼすべての ViewModel です。Rob Allen は、ViewModel 全体で変数を操作する方法について、すばらしい記事を書いています。

さらに、ほとんどの場合、このアプローチは最善の方法ではないと思います。仕事をするためにViewHelperまたはを持っている方がはるかに良いでしょう。Layout-Placeholder今回も素晴らしい記事が書かれました。今回は、私の親愛なる Bakura、別名 Michael Gallego によって書かれました。

現在、これらのアプローチのいずれかが進むべき道です。

于 2013-01-06T09:23:47.777 に答える