Yii: PHP notice - Undefined variable

Тема в разделе "PHP", создана пользователем Vaterland, 12 авг 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Vaterland

    Vaterland Создатель

    Регистр.:
    7 июн 2014
    Сообщения:
    23
    Симпатии:
    14
    Всем привет! При переносе кода (написан с помощью 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($route01) == '/'$route substr($route1);
            
    $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'); ?> и ошибка. С отключением вывода ошибок пхп сайт не работает.

    Подскажите, как исправить, спасибо.
     
  2. chessman

    chessman Создатель

    Регистр.:
    5 окт 2011
    Сообщения:
    12
    Симпатии:
    1
    Может стоит посмотреть настройки РНР в php.ini? (очень актуально, если ты поменял версию РНР на своем серваке или VPS)
     
  3. Vaterland

    Vaterland Создатель

    Регистр.:
    7 июн 2014
    Сообщения:
    23
    Симпатии:
    14
    Все чистое, ставилось через ИСП5

    Сам решил, заменив на else if(isset(Yii::app() -> controller -> cvars[$varName]))
     
    Последнее редактирование модератором: 13 авг 2014
Статус темы:
Закрыта.