Answer the question
In order to leave comments, you need to log in
How to fix Fatal error: Uncaught Error: Call to a member function __toString() on null?
Good afternoon!
PHP7 version
Installed caseChanger plugin
This plugin has always been run, now when installing on a new site, it began to give errors:
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;
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question