Генерация xml

Как генерим xml?

  • Шаблоном(native-php или другим - неважно)

    Голосов: 5 45,5%
  • SimpleXml и ему подобное

    Голосов: 6 54,5%

  • Всего проголосовало
    11

Фанат

oncle terrible
Команда форума
С.
По сути согласен, но начиная с 5.4 это, все-таки, не такая большая проблема.
Для контрол структур можно и длнный написать.
 

Adelf

Administrator
Команда форума
Выбранно взять все в двойные кавыки и поэтому эскейпить внутренние это такой "элегантный" троллинг?
:)) не помню как так получилось. Вообще, это проект сделанный по пути и на коленке, но сильно понравившийся кое-кому и поэтому скоро будет ставиться много куда(и да, это не инет-магазин и вообще не веб-проект). Вот сижу и по максимуму ерунды стараюсь убрать. В данном случае шаблоны, которые в большинстве проектов вполне нормально выглядят, здесь начали выглядеть мусором каким-то. Неприятно открывать.

По итогам данного обсуждения самые нормальные варианты: хелперы или разбираться с тегами на стороне. Спасибо, участвовавшим. Но если будут еще мнения - welcome.
 

Vladson

Сильнобухер
начиная с 5.4 это, все-таки, не такая большая проблема
С 5.4 это вообще не проблема, проблема лишь в том что только с 5.4 а не раньше, но проблема эта временная.
 

fixxxer

К.О.
Партнер клуба
В php коде (который не шаблоны) php тэг только один, в первой строке, там длинная запись никому не мешает.
А для шаблонов вроде же можно включить через ini_set, мм?

Хотя по сабжу я предпочитаю XMLWriter.
 

Vladson

Сильнобухер
Я тут как-то вспомнил как делал RSS для какого-то движка, надо было быстро сделать (не просто быстро а вообще сразу, ибо предыдущий программист не знал что такое LIMIT и выбирал все записи а уже в РНР из всех выбирал сколько надо, рано или поздно сайт стал тормозить) так у меня там были строки типа echo "<title>вапвпавп</title>"; любопытно другое, после этого 8-9 лет прошло, а скрипт до сих пор без изменений работает... (писался вроде даже ещё под РНР4)
 

fixxxer

К.О.
Партнер клуба
:)

если серьезно:
PHP:
$view = new YetAnotherMarkupView;
$model->renderInto($view);
и это то, что должен делать контроллер (а не ворочать дерьмо типа $view->assign('title', $model->title) как у некоторых).
 

Absinthe

жожо
Тогда надо быть последовательным и добавлять toHtml(), toJson(), toYetAnotherMarkup().
Ошибся. ->toArray(), которую контроллер в нужном виде и отдаст.

$model->renderInto($view);
дерьмо типа $view->assign('title', $model->title)
А если без крайностей? Никто не будет так передавать виду значения, туда передадут саму модель: $view->assign('model', $model)
 

fixxxer

К.О.
Партнер клуба
$view->assign('model', $model)
Ну это по сути то же самое. Тут важно, чтобы объект модели не улетел в шаблон с полным доступом ко всяким $model->save() ;)

Никто не будет так передавать виду значения
Ох, если бы никто...
 

fixxxer

К.О.
Партнер клуба
Потому что рано или поздно начнется дурная практика. Если вовремя бить по рукам, ничего страшного, конечно, не случится =)

Да вообще, нормальный подход передавать объекты, но все же менее гибкий:
1) модель может хотеть отдавать во вью не в том виде, в каком идет работа с ее атрибутами, а с некоторой обработкой. Ее право.
2) если перед рендерингом шаблона формировать один большой массив и забыть про объекты моделей, система становится намного универсальнее: можно легко (одной сменой имени класса) отдать все в xml или json, а отрендерит тот, кто запросил - браузер, десктоп-приложение и так далее. Или, например, вынести собиралку вьюх с пачки источников а-ля яндекс на отдельный сервис. С объектами модели получаются разные стратегии рендеринга шаблона и отдачи raw данных.
 

fixxxer

К.О.
Партнер клуба
А зачем?

Ну то есть я понимаю, зачем можно этого захотеть, окей (хотя не одобряю). А что ты будешь делать, если это все надо отдать json-ом на клиент? Как методы моделей тогда вызывать?
 

Absinthe

жожо
А что ты будешь делать, если это все надо отдать json-ом на клиент?
А если не json-ом?
К примеру вывод информации о прямоугольнике, который содержит ->длину, ->ширину и ->площадь().
 

fixxxer

К.О.
Партнер клуба
А если и json-ом, и не json-ом? ;)

PHP:
RectModel::renderInto($view) {
    $view->assignAssoc($this->exportArray());
    $view->assign('square', $this->calcSquare());
}
 

Absinthe

жожо
fixxxer а если у нас несколько методов, а не только area?
За ними придется следить в 2 местах: виде и контроллере.
В итоге метод контроллера раздувается до десятков строк. Кому это нужно?

P.S. square - это площадь в значении "Пойдем на площадь Пушкина?"
 

fixxxer

К.О.
Партнер клуба
P.S. square - это площадь в значении "Пойдем на площадь Пушкина?"
Упс )

2 местах: виде и контроллере
Э, нет, контроллеру про это знать вообще ни на кой не надо. Я привел пример метода _модели_. Сократил C++-подобной записью, сорри если не понятно )
 
Сверху