Вызов функции-члена createTemplate() для необъекта
Я мигрирую веб-сайт, основанный на Smarty, и я попытался выполнить все необходимые условия, чтобы не было никаких проблем, но ("как всегда", я мог бы добавить), у меня есть эта проблема, когда после установки всех необходимых пакетов веб-сайт не работает (у меня ошибка HTTP 500 в браузере) Я нашел эту ошибку в журнале ошибок:
Неустранимая ошибка PHP: вызов функции-члена createTemplate() для необъекта в /var/www/vhosts/placeholder.com/httpdocs/include/sysplugins/smarty_internal_templatebase.php в строке 47
Это на самом деле появляется из файла index.php, где у меня есть этот кусок кода
$smarty = new SmartyEC($page->template);
$smarty->display('index.tpl');
Проблема с отображением шаблона индекса где-то, но я не могу понять, почему.
Чтобы обеспечить больше контекста, мой конструктор выглядит так:
<?php
require 'Smarty.class.php';
class SmartyEC extends Smarty{
function SmartyEC()
{
function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
}
?>
На сервере установлен PHP 5.3.2. установлена и последняя версия Smarty также установлена. Я проверил пути конфигурации и изменил их соответственно, а также включения файла.
Заранее спасибо!
Обновление № 1
Я также попытался удалить определение функции следующим образом:
class SmartyEC extends Smarty {
public function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
но ошибка теперь становится:
Необработанное исключение "SmartyException" с сообщением "Невозможно загрузить файл шаблона" index.tpl "" в /var/www/vhosts/website/httpdocs/includes/sysplugins/smarty_internal_templatebase.php:127\nStack trace:\n#0 /var/www/vhosts/website/httpdocs/includes/sysplugins/smarty_internal_templatebase.php(374): Smarty_Internal_TemplateBase->fetch('index.tpl', NULL, NULL, NULL, true)\n#1 /var/www website/httpdocs/index.php(58): Smarty_Internal_TemplateBase->display('index.tpl')\n#2 {main}\n, брошенный в / var / www / vhosts / website / httpdocs / includes / sysplugins / smarty_internal_templatebase. PHP на линии 127
Обновление 2
Я нашел эту тему CodeIgniter + Smarty = Ошибка, которая дает ту же ошибку, но это не та же ситуация, что и здесь. Еще более интригующим является тот факт, что на другом сервере он работает нормально, так что я предполагаю, что здесь есть проблема с настройкой, а не проблема программирования.
2 ответа
Вы уверены, что вложили __construct()
в SmartyEC()
? (риторический вопрос, извините)
Если бы вы прямо назвали свои функции public
ошибка сразу всплыла бы:
class SmartyEC extends Smarty {
public function SmartyEC()
{
public function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
}
дает тебе
Parse error: syntax error, unexpected T_PUBLIC in test.php on line 7
Начиная с PHP5 мы больше не используем конструкторы имен классов. Мы используем __construct()
, Если вы не позвоните $ec = new SmartyEC(); $ec->SmartyEC();
где-то явно, что объявление функции должно быть удалено:
class SmartyEC extends Smarty {
public function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
пожалуйста, обратите внимание, что ваш пример вызова $smarty = new SmartyEC($page->template);
передает аргумент - тот, который ни SmartyEC()
ни __construct()
ожидается.
Наконец я понял... это был комплекс из 4 факторов, которые не работали:
- Я понизил с smarty 3.1.11 до 3.0.7
- Я нашел другой путь конфигурации, который был связан со старым хостингом - он легко исправился
- Файлы.tpl содержали php-код, такой как "{php} некоторый код здесь {/php}", и исправляли его с помощью
$this->allow_php_tag = true;
внутри функции конструктора - Несмотря на то, что я установил правильные разрешения, система не смогла переписать папку компиляции, поэтому я удалила все в папке компиляции.