@Red_Fox_My

Куда добавить Class в Yii 2, чтобы он отрабатывал всегда при рендере любой страницы?

Куда добавить Class в Yii 2, чтобы он отрабатывал всегда при рендере любой страницы?
  • Вопрос задан
  • 391 просмотр
Решения вопроса 1
berezuev
@berezuev
#define TRUE FALSE
Создайте компонент, как показано здесь
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Комментировать
nskarl
@nskarl
Вообще дизайнер
я обычно в проектах делаю BaseController, от которого потом расширяю все остальные.

BaseController.php:
<?php

namespace frontend\controllers;

use Yii;
use yii\web\Controller;

class BaseController extends Controller
{
	public function init()
    {
		//some
    }
}


SiteController.php:
<?php

namespace frontend\controllers;

use Yii;

class SiteController extends BaseController
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}


это дает возможность в BaseController единожды определять некоторые переменные, которые потом требуются в остальных контроллерах
например:
<?php

namespace frontend\controllers;

use Yii;
use yii\web\Controller;

class BaseController extends Controller
{
	public $userid;

	public function init()
    {
		$this->userid = Yii::$app->user->identity->id;
    }
}


все. Дальше в контроллерах мне не придется каждый раз писать Yii::$app->user->identity->id , достаточно $this->userid
Ответ написан
Isolution666
@Isolution666
творческая личность
Создайте свой класс где вам вздумается, и выводите через узы там, где он вам нужен, класс может хранить переменные и функции, которые вы можете постоянно использовать. Если верно прописаны namespace и use, всё будет работать.
---
Например переменные создаются так:
<?php

namespace app\backend\models; // у вас будет свой путь, создайте класс на IDE, чтобы правильно вывести

use Yii; // если используете узы, пишите после namespace
use yii\helpers\Html; // могут понадобится любые классы

class Yourclass {
    
    const CLOCK = '<i class="fa fa-clock-o"></i>'; // только так передаются "переменные"
    // в функции self::CLOCK 
    // во вьюшке, на любой странице Yourclass::CLOCK;
    // 
    public function getTimeName($params = '') 
    { 
        // данная функция позволяет выводить оформленную дату с тегами
        // в определённом формате, на всём сайте, если вы измените эту функцию
        // везде где вы выведите этот формат поменяется одновременно, что удобно
        // Yourclass::getTimeName(вставляете ваше значение);
        $rezult = Html::tag('small', self::CLOCK . Yourclass::formTime($params), ['class' => 'text-muted']);
        return $rezult; 
    }
}


То есть, во вьюшке это будет так:
<?php
use yii\helpers\Html;
use app\backend\models\Yourclass; // я на абум написал, у вас будет свой путь
?>
<?=Yourclass::CLOCK;?> - глиф иконка часов FontAwesome
<?=Yourclass::getTimeName($model->time);?> - дата и\или время в виде html кода в заданном формате


То есть, класс можно хранить во фронтэнде или в бэкеэнде, где пожелаете, просто соблюдайте узы и пространство имён. Выводит можно и статичные и публичные функции. Проверено лично, плюс можно редактировать файл по средством fopen() в php - как будет удобно. Успехов вам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы