reaper, да, для того и создавался данный пакет. Кстати, некоторый функционал я здесь не затронул, на пример хелперы.
Да хотя бы тот же генератор ссылок пробросить, не будешь же при каждом вызове функции его передавать и тянуть отовсюду.
Хотя если сделать по умнее и из контроллёра (или что там используется) возвращать словарь (имена шаблонов можно тоже, но я предпочёл бы в конфиге хранить), то можно при формировании ответа пробросить. Но всё равно, на мой взгляд разумнее будет ввести ещё одну сущность.
ramzes, reaper верно заметил. Нет смысла изменять шаблон для объекта шаблонизатора, гораздо лучше создать другой объект шаблонизатора с новым шаблоном. В противном, же, случае, может получится так, что окружение настроено для одного шаблона, а подключен другой.
reaper, дополнительный функционал подключается к этому шаблонизатору в виде хелперов, которые можно задать:
...
Template::helper('include', function($file, array $env = []){
$template = new Template($file);
return $template->evn($env);
});
а затем использовать в любом шаблоне:
<html>
<head>
<title>...</title>
</head>
<body>
<?= $include('other_template.html', ['content' => 'Hello world']) ?>
</body>
</html>
Что касается того, как подключать эти хелперы к шаблонизатору в реальном фреймворке я опишу подробнее чуть позже (для этого нужен менеджер модулей).
ramzes, Ну и зачем разводить такую мешанину? Очень просто сделать какую-нибудь ошибку и весело потом её отлавливать в этой горе данных. Это хорошо если в начале у нас шаблонов пару штук и данных мало, а когда их сотни?
reaper, какую ошибку? например?
я не понимаю о каких ошибках ты говоришь.
отправь ты данные в не тот шаблон, виноват ты а не скрипт.
ты точно так же можешь задать не тот шаблон в конструкторе.
о каких ошибках речь?
Delphinum, Ну мне это мало интересно
Предлагаю сделать вот какую штуку, если не сложно будет и впишется в существующий код.
Контроллёры возвращают только данные (массивы, числа, строки).
То, как будет формироваться представление, должно конфигурироваться отдельно. В роутах например.
Т.е. имеем, к примеру, контроллёр:
public function profile(Requst $request) {
$uid = $request->request->get('uid', null);
return $this->repo->find($uid)->to_array();
}
В конфиге пишем:
return [
'routes' => [
'users.profile' => [
'path' => '/users/{uid}/profile',
'handler' => 'users:profile',
'renderer' => 'html:profile.tmpl'
],
'api.users.profile' => [
'path' => '/api/v1/users/{uid}/profile',
'handler' => 'users:profile',
'renderer' => 'json'
]
]
];
Как-то так. Вообще здесь куча подводных камней, но идея, на мой взгляд, имеет право на существование.
ramzes, Так мне надо вручную отслеживать, чтобы всё попало куда надо.
Вот смотри, я создал шаблон:
$t = new T('path/to/tpl');
$t->a = 'a';
$t->b = 'b';
Отрендерил, показал. Потом захотел отрендерить новый.
$t->setPath('another/tpl');
Вот тут я должен убедиться, что данные для предыдущего шаблона никак не повлияют на этот шаблон. Т.е. вручную надо будет их удалить, и подставить новые. А теперь представь, что переменных не две и не три, а штук 10, 20. И шаблонов соответственно столько же. Да я лучше сдохну, чем буду писать такое говно.
любопытствую, ты как две страницы сразу показывать собираешься?
или ты блоками выводить подразумеваешь?
забей в setPath
reset
в чем проблема?