Closed alglyzin closed 9 years ago
Похоже вы с кавычками перемудрили? попробуйте так:
$fenom -> addAccessor('site_name', function (Fenom\Tokenizer $tokens) { return 'echo "Адрес сайта";'; });
Ни чего не помогает((((
Parse error: syntax error, unexpected T_ECHO in .../classes/Fenom/Template.php(462) : eval()'d code on line 6 Warning: Cannot modify header information - headers already sent by
Скиньте сюда или на мой emial код как добавляете акцессор
$fenom -> addAccessor('site_name', function (Fenom\Tokenizer $tokens) { return 'echo "Адрес сайта";'; });
Я понял, это я ввел вас в заблуждение.
$fenom -> addAccessor('site_name', function (Fenom\Tokenizer $tokens) { return '"Адрес сайта"'; });
не надо никаких echo и точек запятой, просто нужно указать код как получить значение. Как его использовать будет решать Fenom исходя из контекста. Прошу прощения, отвечал не подумав
Ага, спасибо. Вот только сейчас не пойму как передать туда данные например из внешней переменной.
$fenom -> addAccessor('site_name', function (Fenom\Tokenizer $tokens) { global $config; return '"$config"'; });
Notice: Undefined variable: config in .../classes/Fenom/Template.php(462) : eval()'d code on line 6
Акцессор должен вернуть PHP код, который будет выполнен только во время выполнения шаблона. Поэтому все не так просто как хотелось бы. Что бы упростить жизнь разработчику есть вариант немного проще (по вашей задаче):
// используем шаблонизатор как хранилище наших объектов
$fenom->config = $config;
$fenom->addAccessorSmart('site_name', '$tpl->getStorage()->config', \Fenom::ACCESSOR_VAR);
// $tpl->getStorage() получить объект шаблонизатора в шаблоне, ->config получить наш объект у шаблонизатора
А можно узнать более развернутый пример или условие задачи которая требует свои акцессор ? просто мне кажется что все можно решить иначе.
Как правило, обычно хватает всем addAccessorSmart
. Использование addAccessor
напрямую очень редкое явление так как там надо самим парсить всю цепочку слов: от $.
и до того момента когда подсчитаете что вам хватит. Наглядные примеры работы с addAccessor можно глянуть в классе Fenom\Accessor (список предопределенных акцессоров с парсерам).
Просто хотел передать в $.site_name название сайта Придется в переменную пихать в шаблон. Ибо я так и не понял как это сделать(
Готовый вариант Вам написали выше.
Используйте пример, который описал выше
$fenom->config = [
"site_name" => // ...
"site_scripts" => //...
// и что еще придумете
];
$fenom->addAccessorSmart('site_name', '$tpl->getStorage()->config', \Fenom::ACCESSOR_VAR);
Тогда в шаблоне
Site: {$.config.site_name}
Спасибо, решил вопрос)
$fenom -> addAccessor('site_name', function (Fenom\Tokenizer $tokens) { return 'echo 'Адрес сайта';'; });
Проблема не решилась((
Parse error: syntax error, unexpected T_ECHO in /classes/Fenom/Template.php(462) : eval()'d code on line 6 Warning: Cannot modify header information - headers already sent by (output started at /classes/Fenom/Template.php(462) : eval()'d code:111) in