Как исправить ошибку: Fatal error: Uncaught Error: Call to a member function __toString() on null in...

Добрый день!

Версия PHP7
Установлен плагин caseChanger
Данный плагин всегда запускался, сейчас при установке на новый сайт стал давать ошибки:

Fatal error: Uncaught Error: Call to a member function __toString() on null in /var/www/sites/data/www/site.ru/core/cache/includes/elements/modsnippet/87.include.cache.php:56 Stack trace: #0 /var/www/sites/data/www/site.ru/core/model/modx/modscript.class.php(76): include() #1 /var/www/sites/data/www/site.ru/core/model/modx/modx.class.php(1859): modScript->process(NULL) #2 /var/www/sites/data/www/site.ru/core/model/modx/filters/modoutputfilter.class.php(676): modX->runSnippet('caseChanger', Array) #3 /var/www/sites/data/www/site.ru/core/model/modx/modparser.class.php(942): modOutputFilter->filter(Object(pdoTag)) #4 /var/www/sites/data/www/site.ru/core/components/pdotools/model/pdotools/pdoparser.class.php(305): modTag->filterOutput() #5 /var/www/sites/data/www/site.ru/core/components/pdotools/model/pdotools/pdoparser.class.php(261): pdoTag->process() #6 /var/www/sites/data/www/site.ru/core/model/modx/modparser.class.php(251): pdoParser->processTag(Object(pdoTag), fals in /var/www/sites/data/www/site.ru/core/cache/includes/elements/modsnippet/87.include.cache.php on line 56

Вот код сниппета:
<?php
/*
* $input / $w - входное слово в режиме фильтра / сниппета
* $p - падеж ['']
* $m - множественное (false)
* $debug - режим отладки (false)
*/
$encoding = end(explode('.', $modx->getOption('encoding', $scriptProperties, "ru_RU.UTF-8")));

$padej = [
    'Р'=>'Р', 'Д' =>'Д', 'В'=>'В', 'Т'=>'Т', 'П'=>'П', 'П-о'=>'П-о', // Русскими буквами
    'R'=>'Р', 'D' =>'Д', 'V'=>'В', 'T'=>'Т', 'P'=>'П', 'Po'=>'П-о', // Латиницей
    1=>'Р', 2 =>'Д', 3=>'В', 4=>'Т', 5=>'П', 6=>'П-о',              // Цифрами
];
$out = ''; // default

// Проверяем данные на входе
if(!$input && empty($w)) return $out;

// Если в режиме фильтра переданы опции
if(!empty($options)){
    parse_str($options);
}

//Задана ли отладка
$debug = empty($debug)? false : true;

//Слово - в URL строку
$w = rawurlencode($input? $input : $w);

//Берем падеж
$p = !empty($p)? $p : 0;

//Форматируем
$p = (int)$p? (int)$p : mb_strtoupper($p, $encoding);

//Если падежа нет или он левый
if(!$p || empty($padej[$p])){
   return $debug? 'Неверно задан падеж' : $out;
} else { 
   $p = $padej[$p];
}

//Множественное число
$m = empty($m)? false : 'множественное';

//Подключаем/отключаем отлов ошибок libXML
libxml_use_internal_errors($debug);

//Получаем объект от Морфера
$xml = simplexml_load_file('http://ws3.morpher.ru/russian/declension?s=' . $w);

//По условиям вытаскиваем из объекта нужное
if($m) { //Если множественное
    //Если передано сразу во множественном - вложенного объекта не будет
    $out .= isset($xml->$m)? $xml->$m->$p->__toString() : $xml->$p->__toString();
}else{ // Если ед.ч.
    $out .= !empty($xml->$p)? $xml->$p->__toString() : '';
}

//Если включен вывод ошибок
if($debug){
    $errors = [];
    foreach (libxml_get_errors() as $error) {
        $errors[] = $error;
    }
    $out .= "\r\n". implode("\r\n", $errors);
}

//Вырубаем буфер ошибок
libxml_clear_errors();

//Отдаем результат
return $out;
Подскажите как это исправить можно? СПАСИБО
MODXyou
14 июня 2019, 18:58
modx.pro
1 124
0

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0