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"/>
Другие вопросы по тегам