yii2 правильная архитектура приложения (передача данных в макет)

0

мне нужно отправить данные с контроллеров на главный макет (что-то вроде уведомления новых сообщений в верхнем меню) мне нужно это во всех приложениях (глобальных)

я нашел один способ передать переменные в макет

Yii::$app->controller->myvar

от класса к макету, но я думаю, что это не лучший способ дублирования кода ко всем контроллерам, возможно, я предполагаю расширить базовый контроллер и установить здесь свою логику?

Скажите, пожалуйста, что лучше всего делать то, что я хочу.

пс. Tnx и извините за мой английский

  • 0
    Проверьте этот вопрос stackoverflow.com/questions/28038912/…
  • 0
    Почему вы просто не используете глобальные параметры приложения Yii :: $ app-> params ['foo'] = 'bar'; // контроллер и эхо Yii :: $ app-> params ['foo']; // в представлении / макете / в другом месте
Теги:
yii2
yii2-advanced-app

3 ответа

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
1

В контроллере вы можете использовать

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

и в макете

<?= $this->params['name'] ?>
  • 0
    дублировать мою логику на все контроллеры?
0

Следующая строка добавляет config\main.php

'user' => array ('class' => 'WebUser',//включить аутентификацию на основе cookie 'allowAutoLogin' => true,),

После этого создайте новый файл в protected\components\WebUser.php, в этом файле WebUser.php

class WebUser расширяет CWebUser {private $ _model;

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

} }

Вы можете получить доступ к файлу макета, подобному этому echo Yii :: app() → user-> update();

  • 0
    Вопрос касается Yii2, а не Yii1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню