Генерация форм Symfony - почему? - PullRequest
8 голосов
/ 03 февраля 2011

Я размышлял об этом уже некоторое время - я так и не понял, почему вы захотите сгенерировать все ваши формы программно, если они не будут полностью динамичными. Но по моему опыту, большинство из них статичны.

Теперь, перейдя к основному вопросу - с Symfony он генерирует все ваши формы для вас на основе таблицы, с которой вы связываете модуль (при его создании). Мой вопрос: зачем вам эти формы генерировать? По большей части это статические формы, которые легко редактировать в шаблоне.

Основная проблема для меня, если у вас есть команда разработчиков бэк-энда и фронт-энда, и, возможно, несколько дизайнеров, например. И дизайнеры или фронтенд-разработчики (которые могут иметь, а могут и не иметь большой опыт работы с PHP) хотят изменить форму (в эстетических целях) в каталоге шаблонов, в котором находятся все представления. Ну, на самом деле они не могут, потому что все это генерируется классом формы, который был создан специально для этой формы. Итак, теперь им нужно вернуться к внутренним разработчикам и попросить их что-то изменить для них?

Возможно, я упускаю точку при генерации формы, но, как я ее вижу - если она статическая, генерировать ее программно не нужно, но если она полностью динамическая, то да, все в порядке.

Есть ли мнения по этому поводу?

Ответы [ 3 ]

6 голосов
/ 03 февраля 2011

Поскольку по большей части используемые типы полей очень похожи на столбцы схемы, при условии, что вы спроектировали схему правильно с самого начала ;-) Например, varchar(200) означает однострочный ввод текста, длинный текст MySQL переводится в текстовое поле и так далее. Быстро и просто перейти к рендерингу, возможно, после нескольких настроек. Сгенерированные классы форм также дают вам место для проверки всех валидаторов виджетов форм для проверки формы.

Конечно, вы можете использовать классы валидатора, где хотите, но фреймворк форм это прекрасно, я чувствую.

Визуализация формы - это отдельная проблема - как вы упомянули, у вас есть на это представление. Ленивый подход в Symfony состоит в том, чтобы просто выполнить <?php echo $form; ?>, но предпочтительно визуализировать отдельные поля, например: <?php echo $form["fieldname"]->render(); ?> и так далее. Если ваши представления структурированы следующим образом, ваши внешние разработчики должны иметь возможность изменять порядок полей по своему усмотрению.

Редактировать : Добавление классов и других атрибутов при рендеринге:

<?php
  echo $form["fieldname"]->render(
    array("class" => "myNewClass", "title" => "My Title", ...)
  );
?>

Редактировать 2 По сути, я пытаюсь донести до вас, что вы всегда сможете найти пример того, где фреймворк форм в Symfony не подходит. Вы сможете найти это, вероятно, для каждого компонента в каждом фреймворке ;-) Но в большинстве случаев он работает нормально и с относительной легкостью. Если вы обнаружите, что постоянно боретесь с этим, то я бы посоветовал вам либо подойти с неверной точки зрения, либо вы просто нашли все упомянутые выше угловые случаи: -)

4 голосов
/ 03 февраля 2011

Генерация форм - это функция, предназначенная для решения конкретной проблемы. Основная проблема заключается в том, что в большинстве случаев при создании объекта модели вам понадобится простая форма, которая содержит только ваши поля и может быть сгенерирована на основе описания вашей модели.

Если вы хотите, чтобы ваше приложение было «хорошо разработанным», ваши классы BaseForm будут содержать все поля объекта модели, и вы можете расширить эти классы для создания определенных форм. Например, допустим, у вас есть объект User и вы хотите два разных типа регистрации в зависимости от возраста регистранта. Эти две формы будут на 90% одинаковыми, поэтому вы можете создать красивый дизайн с помощью BaseUserForm и расширить его двумя различными конкретными формами, как вам нужно. Дополнительным преимуществом является то, что если вы хотите изменить имя столбца, вам не нужно делать это во многих местах, только в одном месте и т. Д.

Эта генерация кода аналогична генерации файлов ORM, когда вы используете Propel или Doctrine или что-то еще, большинство функций этих файлов никогда не будут использоваться, но это дает вам хороший набор инструментов для разработки .

В качестве плюса: Платформа Symfony Form Framework всегда подвергалась ОГРОМНОМУ рефакторингу с первой версии, с 1.1 до 1.3 они всегда меняли его, и, насколько я знаю, версия 2.0 тоже будет чем-то совершенно другим (также это будет независимый пакет многоразового использования за пределами Symfony). Так что, если вы не находите текущую структуру форм полезной, я не слишком удивлен, они тоже не слишком довольны (насколько я знаю).

2 голосов
/ 04 июля 2012

Большинство форм необходимо создавать программно, чтобы, если они были отправлены с ошибками, ошибки могли быть проверены, и форма могла быть возвращена пользователю, частично предварительно заполненным, с ошибками, вставленными в метки соответствующим образом.

Если ваша форма статическая, невозможно вернуть информацию об ошибке проверки или предварительно заполнить форму данными из базы данных или из полей, заполненных пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...