@Mozart

Валидация Kohana 3.1 + Стандартный ORM?

Покажите на примере, как вы валидируете данные при создании двух связанных моделей.

Вводные:

Есть модель ORM user и модель ORM user_contacts. По идее всю валидацию, фильтры мы должны описывать в моделях при помощи function rules() и function filters(). Ловить ошибки валидации мы должны при помощи конструкции try{}catch(){}. Модель user_contacts не может быть создана без модели user. Данные вводятся и отправляются за один раз (одна форма на две модели). В модели user помимо правил самой модели, перед сохранением создается еще $external_validation для проверки на занятость имени.



Вопрос: Как сначала проверить данные, и если у обеих моделей все верно — лишь после этого сохранять модели?

— При проверке по очереди, первая модель бросит исключение, мы не сможем вывести ошибки из второй модели, если они есть.

— Если сначала первую сохранить, а вторая модель бросит исключение — нам надо будет удалять первую, что не очень красиво.

— Если передавать валидацию второй модели в метод сохранения первой — то непонятно куда девать проверку на занятость логина (По идее она должна действовать только при create, и не должна вызываться при каждом изменении модели, поэтому в правила модели не вставишь данную проверку)

— Мы можем проверить обе модели до блока try{}catch(){}, но возникнет проблема, если у второй модели тоже есть $external_validation внутри модели.
  • Вопрос задан
  • 3308 просмотров
Пригласить эксперта
Ответы на вопрос 1
dohlik
@dohlik
1. Почему проверка имени через $external_validation? Что мешает просто добавить правило (как в Auth сделано)?
2. Вообще, лично для меня вторая модель (User_Contacts) не является обязательной. Соответственно вижу два варианта:

* сохраняем первую модель и просим пользователя отредактировать контакты. Даже если он их не сохранит, они опциональны (ну или будем настойчиво их спрашивать, если все же нужны)
* сохраняем первую модель + те поля, которые прошли валидацию. Все, что не прошло из-за ошибок, показываем пользователю. Мне такой вариант нравится больше.

В общем, не паримся с транзакциями, а однозначно зависим только от правильности первой модели (она основная у нас).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы