0

コントローラーからメイン レイアウトにデータを送信する必要があります (トップ メニューの新しいメッセージの通知機能のようなもの) すべてのアプリ (グローバル) で必要です

変数をレイアウトに渡す方法を 1 つ見つけました

Yii::$app->controller->myvar

クラスプロパティからレイアウトまでですが、コードをすべてのコントローラーに複製するのは最善の方法ではないと思います。おそらく、ベースコントローラーを拡張してここにロジックを設定すると思いますか?

私がやりたいことをするためのベストプラクティスを教えてください。

ps。Tnx、私の英語でごめんなさい

4

3 に答える 3

2

コントローラーでは、使用できます

$this->view->params['name'] = 123

そしてレイアウトで

<?= $this->params['name'] ?>
于 2015-02-03T10:57:56.233 に答える
1

1) yii グローバル アプリ パラメータを使用できます

Yii::$app->params['foo'] = 'bar'; // controller

echo Yii::$app->params['foo']; // in view/layout/controllers/elsewhere

2) セッションを利用できます。次の 3 つの関数を使用して、他の人によって拡張されるコントローラーを作成します。

<?php
namespace common\components;
use Yii;
use yii\web\Controller;

class BaseController extends Controller
{

    /**
     * Set user flash notice
     * @param $message
     * @return mixed
     */
    public function setFlash($key, $message){
        return Yii::$app->session->setFlash($key, $message);
    }

    /**
     * Has user flash notice
     * @param $message
     * @return mixed
     */
    public function hasFlash($key){
        if(Yii::$app->session->hasFlash($key)) return True;
        else return false;
    }

    /**
     * Get user flash notice
     * @param $message
     * @return mixed
     */
    public function getFlash($key){
        return Yii::$app->session->getFlash($key);
    }
}

今あなたのコントローラに

use common\components\BaseController;
...
class MyController extends BaseController
...
$this->setFlash('foo','bar'); // setting flash var

そしてあなたの見解では

echo $this->context->getFlash('foo'); // getting flash var

また

echo Yii::$app->controller->getFlash('foo'); // getting flash var
于 2016-03-15T11:02:07.937 に答える
0

以下の行を config\main.php に追加します

'user'=>array( 'class'=>'WebUser', // Cookie ベースの認証を有効にする 'allowAutoLogin'=>true, ),

その後、protected\components\WebUser.php に新しいファイルを作成し、この WebUser.php ファイルに

class WebUser extends CWebUser { プライベート $_model;

function Update()
{
    return $this->myvar='this is my variable';
}

}

この echo Yii::app()->user->update(); のようなレイアウト ファイルでアクセスできます。

于 2015-02-03T11:04:58.183 に答える