Генерация xml

  • Автор темы Автор темы Adelf
  • Дата начала Дата начала

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

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

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

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

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

По итогам данного обсуждения самые нормальные варианты: хелперы или разбираться с тегами на стороне. Спасибо, участвовавшим. Но если будут еще мнения - welcome.
 
начиная с 5.4 это, все-таки, не такая большая проблема
С 5.4 это вообще не проблема, проблема лишь в том что только с 5.4 а не раньше, но проблема эта временная.
 
В php коде (который не шаблоны) php тэг только один, в первой строке, там длинная запись никому не мешает.
А для шаблонов вроде же можно включить через ini_set, мм?

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

отключаю short_tags
13364173319052.jpg
 
:)

если серьезно:
PHP:
$view = new YetAnotherMarkupView;
$model->renderInto($view);
и это то, что должен делать контроллер (а не ворочать дерьмо типа $view->assign('title', $model->title) как у некоторых).
 
Тогда надо быть последовательным и добавлять toHtml(), toJson(), toYetAnotherMarkup().
Ошибся. ->toArray(), которую контроллер в нужном виде и отдаст.

$model->renderInto($view);
дерьмо типа $view->assign('title', $model->title)

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

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

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

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

PHP:
RectModel::renderInto($view) {
    $view->assignAssoc($this->exportArray());
    $view->assign('square', $this->calcSquare());
}
 
fixxxer а если у нас несколько методов, а не только area?
За ними придется следить в 2 местах: виде и контроллере.
В итоге метод контроллера раздувается до десятков строк. Кому это нужно?

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

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