Как CodeIgniter DataMapper ORM узнает, какой набор правил проверки следует применить? - PullRequest
0 голосов
/ 21 апреля 2011

Я использую CodeIgniter DataMapper ORM, но есть кое-что, что я не совсем понимаю.

В этом примере http://datamapper.wanwizard.eu/pages/examples/login.html, вы можете видеть, что в классе модели User определены некоторые $validation правила.

Внутри функции login вы также можете видеть, что она вызывает $this->validate()->get(). Когда функция validation запущена, она должна проверить соответствие всем правилам с $validation.

Что я не понимаю, так это то, что для случая использования входа в систему необходимо проверять только имя пользователя и пароль, но вы можете видеть, что в этом примере есть другие правила проверки, не связанные с этим вариантом использования. В частности, в $validation определено правило confirm_password, и это правило, очевидно, предназначено только для случая использования обновления, а не для случая использования входа в систему.

Поскольку я не вижу никаких кодов, которые обходят эти несвязанные правила в примере, как ORM DataMapper фактически знает, что эти несвязанные правила можно обойти в функции login?

Большое спасибо всем вам.

Ответы [ 4 ]

2 голосов
/ 09 июня 2011

Может быть, решение состоит в том, чтобы сделать 2 модели: одна «логин» (для пользователя таблицы), а другая «регистр» (также для пользователя таблицы). Затем, когда вы хотите войти, просто используйте модель входа пользователя. Я думаю, что это истинное предназначение моделей. (теперь у вас есть 2 набора проверки в 2 моделях)

1 голос
/ 26 марта 2012

Метод проверки Datamapper игнорирует правила для полей, не являющихся частью объекта.Таким образом, правило confirm_password не сработает, если у объекта нет свойства с таким именем поля.

Правила проверки данных должны быть в модели, а не в контроллере, поскольку это единственная точка входа вданные, и это обеспечивает проверку всех данных, поступающих в базу данных.Это также отвечает на DRY, вы не хотите определять правила проверки в каждом контроллере, который использует модель.

Учитывая этот факт, легко определить правила для дополнительных полей, которые могут быть в ваших формах CRUDи держите все это в одном месте.

1 голос
/ 11 февраля 2012

Для входа используйте form_validation library и проверяйте только username/password, для registration вы можете использовать DataMapper и в вашей модели добавить правило confirm_password должно соответствовать password, но не добавлять правило required в confirm_password .. это должно сделать

1 голос
/ 21 апреля 2011

Вызов функции validate () объекта - это все, что необходимо для применения правил проверки. Обратите внимание, что validate запускается автоматически всякий раз, когда вы выполняете вызов save () без параметров. Вы также можете запустить или validate () -> get () для объекта, чтобы получить соответствующую запись, используя текущие значения полей объекта.

http://datamapper.wanwizard.eu/pages/validation.html

Я думаю, просто потому, что валидация будет выполняться с использованием текущих полей объектов, а поле verify_password - это "поле таблицы без базы данных".

...