Yii: PHP notice - Undefined variable

Статус
В этой теме нельзя размещать новые ответы.

Vaterland

Постоялец
Регистрация
7 Июн 2014
Сообщения
56
Реакции
20
Всем привет! При переносе кода (написан с помощью Yii Framework), с 5.3 на 5.4 вываливается ошибка: PHP notice - Undefined variable: cvars.

Сам код:
PHP:
<?php

/* Общий контроллер для проекта */
class MController extends Controller
{
    const MODERATOR = User::ROLE_MODERATOR;

    /* Переменные шаблона, доступны из MController::getCVar(), который обязателен к использованью,
    т.к. не все контроллеры наследуют MController */
    public $showHeaderSlider = false;
    public $modMenuEls = array();
    public $usrMenuEls = array();
    public $layoutParams = array();
    public $enabledCanvas = false;
    public $pre = '';
    public $bodyclass = '';
    public $cvars = array(); // Динамические поля CVar, нуждаются в тестах
    public $isFirstCalledSchedule = true;

    public static function getCVar($varName, $defaultValue = null)
    {
        if(isset(Yii::app()->controller->$varName))
        {
            return Yii::app()->controller->$varName;
        } else if(isset(Yii::app()->controller->$cvars[$varName]))
        {
            return Yii::app()->controller->cvars[$varName];
        } else return $defaultValue;
    }

    public static function setCVar($varName, $value)
    {
        if(isset(Yii::app()->controller->$varName))
        {
            Yii::app()->controller->$varName = $value;
        } else
        {
            Yii::app()->controller->cvars[$varName] = $value;
        }
    }
    /* Добавляет к массиву элементов в контроллере какую-то переменную
    Удобно использовать для добавления элементов в массив меню. ПРинимает в качестве параметра
    $value как массив, так и одиночный элемент
    */
    public static function appendToCVar($varName, $value)
    {
        $var = MController::getCVar($varName, array());
        if(!is_array($value)) $value = array($value);
        $var += $value;
        MController::setCVar($varName, $var);
    }

    public $activeMenuBtn = '';
    /*Функция для вывода класса кнопки меню
    */
    public static function mA($class, $active = 'active')
    {
        if(MController::getCVar('activeMenuBtn') == $class) $class .= ' '.$active;
        return $class;
    }

    public static function isActiveRoute($route, $class = 'active', $noClass = '')
    {
        if(is_array($route))
        {
            $result = '';
            foreach($route as $r)
            {
                $result = self::isActiveRoute($r);
                if($result == $class) return $result;
            }

            return $noClass;
        }

        if(substr($route, 0, 1) == '/') $route = substr($route, 1);
        $controller = Yii::app()->controller;
        $routeCurrent = '';
        if ($controller->module !== null) {
            $routeCurrent .= sprintf('%s/', $controller->module->id);
        }
        $routeCurrent .= sprintf('%s/%s', $controller->id, $controller->action->id);

        $pattern = sprintf('~%s~', preg_quote($route));
        if (preg_match($pattern, $routeCurrent)) {
            return $class;
        }

        return $noClass;
    }
    /* -- end template vars -- */


    public function registerGmapPlaces()
    {
        Yii::app()->clientScript->registerScriptFile('https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places');
    }

    public function enablePrettyPhotos()
    {
        Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/jquery.prettyPhoto.js');
        Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/prettyPhoto.css');

        Yii::app()->clientScript->registerScript('prettyPhoto_init',
            '$(document).ready(function(){$("a[rel^=\'prettyPhoto\']").prettyPhoto();});');
    }

    /* Включает библиотеку для работы с графиками Flot */
    public function enableFlot()
    {
        $this->enabledCanvas = true;
        Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/flot/jquery.flot.js');
        Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/flot/jquery.flot.time.js');
    }

    public function enableBootstrap()
    {
        Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/js/bootstrap/css/bootstrap.min.css');
        Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/js/bootstrap/js/bootstrap.min.js');
    }
    public function pdf()
    {
        require Yii::app()->basePath.'/components/tcpdf/config/lang/rus.php';
        require Yii::app()->basePath.'/components/tcpdf/mpdf.php';
        $this->layout = '//layouts/just_content';
    }

    /* Включение скриптов библиотеки jQuery.FileUpload */
    public function enableFineUploader()
    {
        $upl = Yii::createComponent('ext.EAjaxUpload.EAjaxUpload');
        $upl->assets();
    }
    public function __construct($id, $module = null)
    {
        parent::__construct($id, $module);
        $this->setPageTitle('');
    }

    public function init() {
        parent::init();

        $user = User::model()->findByPk(Yii::app()->user->id);

        if($user)
        {
            $user->lastvisit = time();
            $user->update();
        }
        if (Yii::app()->request->getIsAjaxRequest()) {
                   $this->layout = '//layouts/just_content';
       }
    }
  
    public function setPageTitle($value)
    {
        if($value)
            parent::setPageTitle($value.' - Hopsi.ru');
        else parent::setPageTitle('Hopsi.ru');
    }
    public function renderAjax($view, $data=NULL, $return=false)
    {
        if(Yii::app()->request->isAjaxRequest)
        {
            $this->renderPartial($view, $data, $return);
        } else
            $this->render($view, $data, $return);
    }
  
    /* Короткая запись проверки аякс запроса */
    public function isAjax()
    {
        return Yii::app()->request->isAjaxRequest;
    }

    /* Функия устанавливает права доступа к действию. */
    public function setAccess($role, $only = false)
    {
        if(Access::is($role, $only)) return true;

        if(Access::isGuest())
            $this->redirect(array('/user/login'));
        else
            throw new CHttpException(403, "Вы не имеете прав доступа к этой странице");
    }

    /* Сделать редирект на предыдущую страницу */
    public function redirectBack()
    {
        $this->redirect(Yii::app()->request->urlReferrer);
    }

    public function flashOut($key)
    {
        if(Yii::app()->user->hasFlash($key)) {
            ?>
                <div class="flash <? echo $key; ?>"><? echo Yii::app()->user->getFlash($key); ?></div>
            <?
        }
    }

    public function enableUserSidebar($user = null)
    {
        if(!$user) $user = User::current();
        $this->layoutParams['model'] = $user;
        $this->layout = '//layouts/user_profile';
    }
};

Вроде все есть: $cvars = array();
Дальше в коде вызываю: <? echo MController::getCVar('getCVar'); ?> и ошибка. С отключением вывода ошибок пхп сайт не работает.

Подскажите, как исправить, спасибо.
 
Может стоит посмотреть настройки РНР в php.ini? (очень актуально, если ты поменял версию РНР на своем серваке или VPS)
 
Может стоит посмотреть настройки РНР в php.ini? (очень актуально, если ты поменял версию РНР на своем серваке или VPS)
Все чистое, ставилось через ИСП5

Сам решил, заменив на else if(isset(Yii::app() -> controller -> cvars[$varName]))
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху