Вызов функции-члена 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 факторов, которые не работали:

  1. Я понизил с smarty 3.1.11 до 3.0.7
  2. Я нашел другой путь конфигурации, который был связан со старым хостингом - он легко исправился
  3. Файлы.tpl содержали php-код, такой как "{php} некоторый код здесь {/php}", и исправляли его с помощью $this->allow_php_tag = true; внутри функции конструктора
  4. Несмотря на то, что я установил правильные разрешения, система не смогла переписать папку компиляции, поэтому я удалила все в папке компиляции.
Другие вопросы по тегам