一方のコントローラーのアクションメソッドから呼び出しthe Forward plugin
て、もう一方のコントローラーのアクションメソッドから値を取得します。
namespace Foo/Controller;
class FooController {
public function indexAction() {
// I expect the $result to be an associative array,
// but the $result is an instance of the Zend\View\Model\ViewModel
$result = $this->forward()->dispatch('Boo/Controller/Boo',
array(
'action' => 'start'
));
}
}
そして、Boo
これが私が適用するコントローラーです:
namespace Boo/Controller;
class BooController {
public function startAction() {
// I want this array to be returned,
// but an instance of the ViewModel is returned instead
return array(
'one' => 'value one',
'two' => 'value two',
'three' => 'value three',
);
}
}
そして私がprint_r($result)
それがページのViewModelである場合error/404
:
Zend\View\Model\ViewModel Object
(
[captureTo:protected] => content
[children:protected] => Array
(
)
[options:protected] => Array
(
)
[template:protected] => error/404
[terminate:protected] =>
[variables:protected] => Array
(
[content] => Page not found
[message] => Page not found.
[reason] => error-controller-cannot-dispatch
)
[append:protected] =>
)
何が起こっている?この動作を変更して、必要なデータ型を取得するにはどうすればよいthe Forward plugin
ですか?
UPD 1
今のところここでこれだけが見つかりました:
MVCは、これを自動化するために、コントローラーのリスナーをいくつか登録します。1つ目は、コントローラーから連想配列を返したかどうかを確認します。その場合、ビューモデルを作成し、この連想配列を変数コンテナにします。このビューモデルは、MvcEventの結果を置き換えます。
そして、これは機能しません:
$this->getEvent()->setResult(array(
'one' => 'value one',
'two' => 'value two',
'three' => 'value three',
));
return $this->getEvent()->getResult(); // doesn't work, returns ViewModel anyway
つまり、配列だけを取得する代わりに、変数をに入れてViewModel
、を返し、ViewModel
それらの変数をから取得する必要がありますViewModel
。とても良いデザインだと言えます。