PHPTAL: решение Viewmodel
Я взял PHPTAL (после того, как пришел из PHPMustache) и пытаюсь внедрить стиль Mustache класса ViewModel в мой шаблон. Позволь мне объяснить..
контроллер
$viewmodel = new \Viewmodel\Home();
$template = new \PHPTAL('application/views/home.html');
$template->viewmodel = $viewmodel;
echo $template->execute();
home.html <- template
<p>Hello <strong>${viewmodel/test}</strong>.</p>
Home.php <- класс модели представления
namespace Viewmodel;
class Home {
function test() {
return "world";
}
}
Вышеприведенное работает, но как мне избежать префикса каждой ссылки на переменную с помощью "viewmodel /"?
С помощью усов ваш переменный контекст может быть одним классом. например. echo $template->render($html, $viewmodel);
, Префикс не обязателен. Все мясо находится внутри слабо связанной модели. Я хотел бы применить это поведение с PHPTAL без необходимости явно назначать весь класс имени переменной.
1 ответ
Короче нет.
Там нет эквивалента JavaScript with(model){}
оператор. Вы должны четко указать, какие переменные вы объявляете через $context->set()
и использовать модели явно, например, ${user/name}
скорее, чем ${name}
, Последняя версия (в GitHub) поддерживает замыкания, так что вы можете использовать это для лениво вычисляемых переменных.
Если вы не предоставляете прямой доступ к моделям и хотите проксировать все данные через модель представления, это выглядит как несоответствие импеданса философии дизайна Mustache.
В подходе PHPTAL к MVC ваша бизнес-логика обрабатывается моделью / контроллером (например, хранится / обрабатывается баланс счета клиента), и любая логика, специфичная для представления (например, если баланс отрицательный, отображается красным) в шаблон.
Между объектами нет промежуточного объекта для передачи выразительности шаблону, потому что язык шаблона более выразителен и может быть расширен с помощью выражений TALES:
<strong tal:condition="customer/isInDebt"/>
<strong tal:condition="isNegative:customer/balance"/>