Vaterland
Постоялец
- Регистрация
- 7 Июн 2014
- Сообщения
- 56
- Реакции
- 20
- Автор темы
- #1
Всем привет! При переносе кода (написан с помощью Yii Framework), с 5.3 на 5.4 вываливается ошибка: PHP notice - Undefined variable: cvars.
Сам код:
Вроде все есть: $cvars = array();
Дальше в коде вызываю: <? echo MController::getCVar('getCVar'); ?> и ошибка. С отключением вывода ошибок пхп сайт не работает.
Подскажите, как исправить, спасибо.
Сам код:
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'); ?> и ошибка. С отключением вывода ошибок пхп сайт не работает.
Подскажите, как исправить, спасибо.