3

ビューにいくつかの変数を渡すコントローラー プラグインを作成しました。しかし、これらの変数は私のビュー内からアクセスできません。

サンプルコードは次のとおりです。

namespace Application\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\View\Model\ViewModel;

class Myclass extends AbstractPlugin
{
    public function setup($event)
    {
        $view = new ViewModel();
        return $view->setVariables(array(
            'MyVariable' => 'VALUE' //this variable is not accessible from within view
        ));

    }   
}

なにか提案を?

4

2 に答える 2

0

プラグイン ロジックを何らかの方法でイベント マネージャーにアタッチして実行している場合 (パラメーターを指定すると、そのように見え$eventます)、次のように単純に使用できます。

$viewModel = $event->getViewModel();そのように変数を追加します。

ViewModel はその時点でコントローラー アクションによって既に作成されており、変更しているだけなので、これはMvcEvent::EVENT_DISPATCHおよびイベント タイプに対してのみ機能することに注意してください。MvcEvent::EVENT_RENDERそうしないと、ここで何をしても、アクション コントローラーが起動したときに上書きされてしまいます。

于 2012-12-30T22:33:59.703 に答える
-2

MvcEvent :: EVENT_RENDERイベントをアタッチし、イベントトリガー時にビューモデルにアクセスできます。

use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\Mvc\MvcEvent;
class Myclass extends AbstractPlugin
{
    public function __invoke()
    {
        $this->getController()->getEvent()->getApplication()->getEventManager()->attach(MvcEvent::EVENT_RENDER, array($this, 'onRender'));
    }

    public function onRender($event)
    {
        $viewModel = $event->getViewModel();
        $viewModel->setVariables(array(
            'MyVariable' => 'VALUE'
        ));
    }

}
于 2012-11-02T05:40:14.690 に答える