Пошаговое заполнение модели

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Пошаговое заполнение модели

Сообщение mitaichik »

Как пошагово заполнять модель? Т.е. на одной странице заполняем одну часть аттрибутов, на другой - другую.

Точнее, вопрос в следующем: Где ее сохранять? В сессии не получается - после этого почему-то не действуют правила валидации. Думаю с сериализацией в файл будет тот же эффект.

У кого какие мысли?
byteasdf
Сообщения: 99
Зарегистрирован: 2010.09.15, 09:01

Re: Пошаговое заполнение модели

Сообщение byteasdf »

Мысль, посмотри на это расширение. Делает как раз то, что тебе нужно.
http://www.yiiframework.com/extension/wizard-behavior/
А вообще, видимо где-то у тебя ошибка в логике. Я делал подобный функционал, и промежуточные данные хранил в сессии. Валидация проходила нормально.
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: Пошаговое заполнение модели

Сообщение Loki »

Хм. А в чём собственно проблема? Или сохранение нужно без submit`а формы?.. Если нужно с сабмитом то запросто можно сохранить в БД частично заполненную модель и добавляем флаг is_finalized при отсутствии которого форма не считается полностью заполненной. Примерный алгоритм:
1) Заполняем форму на одной странице.
2) После сабмита переходим на другую страницу, заполняем из сохранённых данных поля формы и продолжаем заполнение.
3) Сабмитим следующую часть и устанавливаем флаг заполнения в позицию true.

Можно в принципе и без флага, тогда просто уставнавливаем обязательные поля и в случае их отсутствия считаем не действительным заполненность формы.
Ещё как вариант загружаем всю форму сразу и при помощи JS скрываем часть. Как только нам нужно перейти к следующему этапу, делаем проверку полей ajax`ом и начинаем заполнение остальной формы.

ЗЫ: Расширение не смотрел, так что может там что то более удачное)
byteasdf
Сообщения: 99
Зарегистрирован: 2010.09.15, 09:01

Re: Пошаговое заполнение модели

Сообщение byteasdf »

Loki писал(а):Если нужно с сабмитом то запросто можно сохранить в БД частично заполненную модель и добавляем флаг is_finalized при отсутствии которого форма не считается полностью заполненной.
Можно в принципе и без флага, тогда просто уставнавливаем обязательные поля и в случае их отсутствия считаем не действительным заполненность формы.
Плохая практика, держать в базе невалидные/неполные данные. Ибо нам потом надо будет регулярно искать и удалять эти данные. В то время, как хранение модели в сессии всех этих недостатков лишено.
Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: Пошаговое заполнение модели

Сообщение Loki »

Плохая практика, держать в базе невалидные/неполные данные. Ибо нам потом надо будет регулярно искать и удалять эти данные. В то время, как хранение модели в сессии всех этих недостатков лишено.
Не спорю, но это лишь один из вариантов решения предложенных мной) Хранение в сессии удобнее, особенно если правильно настроить сценарии для валидации)
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Пошаговое заполнение модели

Сообщение mitaichik »

byteasdf писал(а):Мысль, посмотри на это расширение. Делает как раз то, что тебе нужно.
http://www.yiiframework.com/extension/wizard-behavior/
А вообще, видимо где-то у тебя ошибка в логике. Я делал подобный функционал, и промежуточные данные хранил в сессии. Валидация проходила нормально.
Спасибо большое за ссылку - перерыл все extentions и, видно, не заметил.
Loki писал(а):Хм. А в чём собственно проблема? Или сохранение нужно без submit`а формы?.. Если нужно с сабмитом то запросто можно сохранить в БД частично заполненную модель и добавляем флаг is_finalized при отсутствии которого форма не считается полностью заполненной. Примерный алгоритм:
1) Заполняем форму на одной странице.
2) После сабмита переходим на другую страницу, заполняем из сохранённых данных поля формы и продолжаем заполнение.
3) Сабмитим следующую часть и устанавливаем флаг заполнения в позицию true.

Можно в принципе и без флага, тогда просто уставнавливаем обязательные поля и в случае их отсутствия считаем не действительным заполненность формы.
Ещё как вариант загружаем всю форму сразу и при помощи JS скрываем часть. Как только нам нужно перейти к следующему этапу, делаем проверку полей ajax`ом и начинаем заполнение остальной формы.

ЗЫ: Расширение не смотрел, так что может там что то более удачное)
У меня особая модель, ее нельзя сохранять несколько раз )
Ответить