Вообще, шаблонизаторы в РНР, да и вообще везде (в контексте веб-фреймворков) мне кажется свернули куда-то не туда.
В вебе в принципе подобные сворачивания в жопу по приколу распространены повсеместно. Чего только стоит создание SPA из всего подряд на тормозящем реакте (сделать из твиттера что-то тормознутее опенвк было сложно, но разработчики фронтенд-фреймворков справились, превзойдя все ожидания). Особенно смешно когда берут не менее тормозной ларавел и юзают чисто для создания рест апи и вывода приложухи на реакте/вуе🤡.
Грубо говоря, если вам кажется, что раньше веб был лучше, то да, вы не ошибаетесь. И дело даже не в тОтАлЬнОй аНаЛьНоЙ слежке, а в долбоёбских архитектурных решениях современных программистов. Но! Всё ещё впереди. Или сзади, но поход назад впереди. Вот например ребята из Bandcamp делают Hotwire, который у себя в продуктах юзают. Что это такое можете почитать в интернете, а то опять пост засоряется ненужной чепухой, я просто скажу что это нечто крутое и в симфони шесть для этого есть бандл! И на РоР тоже.
Ну да ладно, с SPA разобрались. Поняли, что есть какое-то небольшое движение по улучшению ситуации с ними. Но революции с шаблонизаторами нам всё ещё нужно подождать. Но чтобы хоть как-то её приблизить, пусть и милипиздрически, хочу вам собственно рассказать немного о старом шаблонизаторе TAL и о том, почему же он лучше всего остального, что мы имеем сейчас.
Чтобы не сильно напряжно было, давайте сравним условный Twig и Latte. Оба шаблонизатора работают под пых, имеют несколько общих проблем, о них позже. Но есть то, что Latte делает лучше Twig гораздо лучше. И я даже не о том, что твиг долбаёб имеет свой велосипед с синтаксисом непонятным.
Я о том, что большинство шаблонизаторов отрицают среду в которой находятся. Они дают свой синтаксис и сделаны так, чтобы шаблоны можно было делать из всего, хоть HTML, хоть Markdown, хоть что угодно ещё. Но оправданы ли такие решения?
Я не буду говорить, что совсем нет. Эти приколы делались людьми, которые в разы умнее меня, было бы глупо даже предполагать что это всё придумали от нечего делать. Эти решения были скорее всего приняты чтобы улучшить переносимость (один и тот же синтаксис шаблонизатора везде, от С до жабы) и универсальность (хочешь веб-страничку сделать? пожалуйста. нужно склеить документ textile? окей. высрать гифку? ээээээ... ок??). Делать универсальные, переносимые и переиспользуемые продукты это очень правильно. В принципе, есть очень много правильных вещей. Правильно не материться на всю ивановскую, но для удобства передачи мыслей вы ведь иногда делаете так рядом с друзьями, не так ли?
Тут то же самое. Как бы круто, но как бы игра не стоит свеч. Переносимый синтаксис и универсальность порождают тихий ужас. Подумайте сами. В 99% случаев вы пишите в ваших проектах на РНР шаблоны для HTML, но вставляете в этот хтмл совершенно чужеродные теги вида {% kakashki %} и просто охуительные выражения такого вида: {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('pure-control-group')) }) -%}
Ну не пиздец ли? Да, в некоторых шаблонизаторах ситуация с этим получше, но проблема остаётся. Вы платите скоростью разработки и скоростью понимания чужого кода за то, чем вы не пользуетесь. В подавляющем большинстве случаев, вам не влом будет выучить ещё один шаблонизатор для другого языка и шаблонизируете вы зачастую только HTML. Но при этом пишите универсально) И ваш мозг постоянно вынужден переключать мыслительные контексты чтобы не ошибиться. А то вы пишите свои контроллеры на пыхе, а шаблоны на хтмл+(нечто похожее на раст).
HTML-документы уже имеют свою структуру, своё место для аттрибутов и так далее. Так ли нужно придумывать новый язык для шаблонизации, если можно просто придумать расширение для HTML, которое будет уважать "обычаи" и хтмл, и ЯП под который шаблоны делаются? Вопрос, мне кажется, риторический.
И именно поэтому мне нравки Latte. К большому сожалению, там всё равно есть эти смешные {tags}, но большинство функционала там можно доступно и при помощи n:attributes! В итоге шаблоны выглядят красивее и чище. Выражения Latte копирует в закэшированый РНР почти что "как есть", учить новые правила не надо - везде РНР. И в контроллере, и в шаблоне.
Но, как бы мне не нравился Latte, я считаю что он не самый крутой шаблонизатор. Он двигается в нужном направлении, но пытается лишь облегчить шаблонизационный пиздец, а не решает проблему целиком.
А на этом моменте я сделаю снова перекат в другой пост. В этом посте мы обсудили проблему, почему она важна и как её сейчас решают, а в следующем обсудим как её правильно решать так, чтобы было аоаоа ммм.