Поиск по этому блогу

четверг, 17 ноября 2011 г.

Symfony 2 Фиктивные модели для форм

Привет, %username%.

Обещал в блоге писать про яву, но так получилось, что сейчас разбираюсь с Symfony2 + Doctrine 2. Поэтому пишу что нарыл. Про формы symfony 2 можно почитать здесь. Правда там не всё, что нужно. Для простой формочки хватает, а когда начинаешь делать что-то по сложнее - то возникают проблемы. Проблема первая. Есть модель(entity). Нужно сделать форму определенного вида. Причем элементы модели не совпадают с элементами формы. Долго мучался, с мануалами и стилями, что-то получилось, а что-то оказалось сделать вообще не возможно.
Посмотрим что из этого получилось.




Опишу возможные выходы из ситуации:

Решение первое. Уродское

Делаем форму руками, получаем сырые данные, пихаем в модель. Решение работоспособное, но очень не красивое. Мне оно не нравится.

Решение второе. Красивое

Заводим новую модель, которая не привязана в БД. У этой модели прописываем нужные поля и нужные типы - такие как у формы. Пишем класс FormType, который построит форму. Стилями выровняем её вид. А далее как в мануале. В конце осталось скопировать данные из дополнительной модели в основную. Плюс такого подхода в том, что не нужно работать с сырыми данными. А переливание данных из модели можно проверить UNIT-тестами. А так же мы используем ООП на полную катушку и работаем с объектами. Хочется как-нибудь написать более развернутую статью про это с примерами. Если я всё-же её сделаю, то поставлю сюда ссылку.

4 комментария:

  1. Например для формы обратной связи можно создать ентити не связанной с базой
    валицадия и в таком случее работает тоже :)

    ОтветитьУдалить
  2. Можно, у меня был фильтр, не связанный с БД.
    Есть сложности, например, с сериализацией объекта в сессию. Оно работать не всегда будет.
    Дело в том, сами формы ориентируются на БД, поэтому при повторном использовании объекта будет эксепшен. Что-то типа, объект не в БД.

    Однако валидация на формах сработает, если у нас новый объект. Запихиваем туда данные, и симфони формы думают, что это у нас данные по умолчанию.

    У меня же кончилось всё тем, что вместо того, чтобы изголяться - я поместил объект в БД. Всё-равно его где-то нужно было хранить.

    ОтветитьУдалить
  3. вот ещё полезная статья по теме http://plutov.by/post/data_fixtures

    ОтветитьУдалить