28

アプリケーション全体(グローバル)で、一連の変数をlayout.phtmlに渡したいと思います。つまり、使いたくないということです

$this->layout()->someVar = someValue;

余分な作業とコードがたくさん必要になるため、私が持っているすべてのアクションで。それで、それを一箇所だけで行う方法はありますか?または私が言ったことは私が得たすべてです!願っていません:)

たぶんセッションを使用していますか?– レミ・トーマス

解決策をありがとう。とりあえず私が使っているのはこれです。ログインしたユーザー情報、システムとレイアウトの設定、および ACL リスト用。しかし問題は、layout.phtml で新しいオブジェクトを定義しなければならないことですが、これは適切ではないと思いますか? ビューモデルで使用する必要があるデータは、コントローラーアクションを使用して渡す必要があることをどこかで読みました。特に、私は手を抜くのが好きではないので、これを行うためのクリーンな方法があれば、この方法は避けたいと思います。そして最近、各ユーザーの未読メッセージの数を取得して、layout.phtml で使用する必要があります。したがって、layout.phtml でそれを行うと、ビュー モデルまたはレイアウト内の大量の php スクリプトになります。

ありがとう

4

6 に答える 6

37

これはまさにあなたが望むものです...

// Do this inside your Controller before you return your ViewModel
$this->layout()->setVariable('stack', 'overflow');

// Then inside your layout.phtml
echo $this->stack;

ビュー ヘルパー、イベント マネージャー、サービス マネージャー、その他のクラス メソッドのジャグリングはありません。なぜ Stack のユーザーは物事を非常に複雑にすることがあるのでしょうか?

于 2013-12-16T06:32:06.263 に答える
3

Application/Module.php で 1) 次のように zend フレームワークの Dispatch イベントを作成します。

public function onBootstrap(MvcEvent $e)
{ 
    $eventManager        = $e->getApplication()->getEventManager();
    $eventManager->attach('dispatch', array($this, 'loadConfiguration' ));
}    
public function loadConfiguration(MvcEvent $e)
{           
      $controller = $e->getTarget();
      $controller->layout()->YOUR_VARIABLE_NAME = $YOUR_VALUE;
}

2) これで、次のようにレイアウトで定義済みの変数にアクセスできます: $this->YOUR_VARIABLE_NAME;

于 2015-06-10T11:20:05.680 に答える
1

以下のように ModuleManager を使用して、ZendFramework 2 の Application/Module.php からグローバル変数をレイアウトに渡すことができます。

Application/Module.php で

ステップ1:

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\Mvc\MvcEvent;

ステップ2:

class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{    
    public function onBootstrap(MvcEvent $e)
    { 
        $eventManager        = $e->getApplication()->getEventManager();
        $eventManager->attach('dispatch', array($this, 'loadConfiguration' ));
    }    
    public function loadConfiguration(MvcEvent $e)
    {           
          $controller = $e->getTarget();
          $controller->layout()->YOUR_VARIABLE_NAME = $YOUR_VALUE;
    }


  // Your remaining code here....

}

ステップ 3:

あなたのlayout.phtmlファイルで、変数を次のように使用します$this->YOUR_VARIABLE_NAME

これが役立つことを願っています。

于 2014-01-30T11:51:10.587 に答える
0

継承を使用して、レイアウト変数を設定するベース コントローラーを介して繰り返し可能な構成を抽象化してみませんか。ここでは再利用が主な関心事であるため、基本的な OOP で十分です。Zend がすべてを行う必要はありません :)。

于 2015-08-19T16:02:16.917 に答える