Ошибка "Шаблон не найден" - Fat Free Framework

Я проработал примеры в документации для Fat Free Framework, и есть один пример, который я не могу заставить работать. Это следующее:

$f3=require('lib/base.php');
$f3->route('GET /',
    function($f3) {
        $f3->set('name','world');
        $template=new Template;
        echo $template->render('template.htm');
        // Above lines can be written as:
        // echo Template::instance()->render('template.htm');
    }
);
$f3->run();

Я получаю сообщение об ошибке, что шаблон не найден. Ошибка указывает на строку, в которой рендерится файл template.htm, и жалуется на Preview->render (то есть на его суперкласс, а не на Template->render). Я даже не вижу файла для класса Preview в кодовой базе.

Интересно, что если я использую тот же файл для примера просмотра (ниже), он работает просто отлично.

$f3=require('lib/base.php');
$f3->route('GET /',
    function($f3) {
        $f3->set('name','world');
        $view=new View;
        echo $view->render('template.htm');
        // Previous two lines can be shortened to:
        // echo View::instance()->render('template.htm');
    }
);
$f3->run();

Однако, если я собираюсь использовать этот фреймворк, я хотел бы также иметь возможность использовать его функцию шаблонов.

Кто-нибудь с опытом работы с этой структурой знает, в чем может быть проблема? Я скачал код с Github (https://github.com/bcosca/fatfree).


person whistler    schedule 15.01.2015    source источник
comment
Одно различие, которое я вижу между View и Template, заключается в том, что последнему нужен каталог TEMP (по умолчанию: tmp/). Убедитесь, что этот каталог существует и доступен для записи.   -  person xfra35    schedule 15.01.2015
comment
когда вы используете класс Template, убедитесь, что для переменной UI задан путь, по которому находится файл template.htm.   -  person ikkez    schedule 15.01.2015
comment
Оба этих комментария помогли мне решить проблему!! Большое спасибо! Если кто-то из вас захочет объединить оба варианта в одно решение, я отмечу его как правильное.   -  person whistler    schedule 15.01.2015


Ответы (4)


По умолчанию F3 использует ту же папку, где находится ваш основной файл (где вы запускаете экземпляр фреймворка). Вы можете изменить это поведение, задав новый путь для параметра UI. Вкратце:

$f3 = \Base::instance();
$f3->set('UI', path_to_your_templates);

скажем, у вас есть следующая структура:

- app
-- views
--- template.htm (your template)
- public
-- index.php (where your init the framework)
-- (template files are expected here by default)

public/index.php выглядит так:

$f3 = \Base::instance();
$f3->set('UI',  __DIR__.'/../app/views/');
$f3->route('GET /',
function($f3) {
    echo  Template::instance()->render('template.htm');
}

Надеюсь, поможет.

person SuN    schedule 29.04.2020

Используйте .html вместо .htm. Да, это действительно важно.

person sascha    schedule 15.01.2015
comment
Почему ты это сказал? Это не должно иметь значения. Фреймворк не заботится о расширении файла шаблона. - person xfra35; 15.01.2015
comment
Потому что я почти уверен, что у нас была эта проблема в прошлом, которую можно было исправить, переименовав файлы в .html. - person sascha; 15.01.2015

У меня нет опыта использования fat free framework, но это общий указатель того, как решить эту проблему.

По-видимому, исключение файла не найдено создается каким-то кодом внутри безжировой структуры. Попробуйте выполнить отладку с помощью XDebug.

person kranthi117    schedule 15.01.2015

Я столкнулся с этой проблемой в версии Fat Free Framework 3.5.1.

Проблема возникает из-за того, что фреймворк OOB (по крайней мере, в этой версии) связан с образцом, так что шаблоны ищутся в подпапке «ui/» корневой папки фреймворка без жира.

Что мне об этом говорит? Итак... OOB config.ini имеет следующее содержимое:

[globals]
DEBUG=3
UI=ui/

Чтобы легко решить проблему либо:

  1. Поместите файл «template.htm» в подпапку «ui/»

OR

  1. Переименуйте подпапку «ui/» в любое удобное для вас место в config.ini и поместите в это место файл «template.htm».

СОВЕТ. Убедитесь, что любой путь пользовательского интерфейса, который вы указываете, заканчивается символом /, и если вам нужно указать несколько путей, вы можете использовать | или или ; разделители (убедитесь, что каждый путь заканчивается на /)

person nikolaosinlight    schedule 08.09.2016