Проверка модели Zend - PullRequest
       18

Проверка модели Zend

4 голосов
/ 19 ноября 2010

Я работаю над приложением Zend, но не имею большого опыта работы с Zend, поэтому просто полагаюсь на мой опыт RubyOnRails.

Из пары статей я обнаружил, что большая часть проверки осуществляется на уровне форм - с помощью Zend_Form.Но для меня это выглядит немного странно - как насчет проверки на уровне модели - создать модель, основанную на данных формы и выполнить что-то вроде $model->isValid();, это имеет смысл, так как я создаю некоторые модели без пост-запросов форм.

Моя текущая модель потока:

ProductMapper extends Zend_Db_Table
Product extends Zend_Db_Table_Row

И, учитывая, что я делаю что-то вроде

$mapper = new ProductMapper();
$product => $mapper->find(...);

// Do some staff with this model
// And want to check if it's valid before saving

if ($product.isValid()) {
    $product.save(); // Zend_Db_Table_Row method
} else {
    ...
}

Я понимаю, что я могу просто сделать проверку с RegExp внутри isValid метода, но я хотел бы использовать уже реализованные методы из Zend_Form, такие как addValidator, addFilter и все эти полезные вещи.

Также это правильный способ управления моделями в Zend?

Любая помощь или предложения будут очень признательны!

Ответы [ 3 ]

2 голосов
/ 19 ноября 2010

Вы можете использовать те же фильтры и / или валидаторы, что и Zend_Form, но вот так:

$validator = new Zend_Validate_Allnum();
if ($validator->isValid($data)
do some code

или

$filter = new Zend_Filter_StringTrim();
$filteredVal = $filter->filter($val);

, так что вы можете создать свой собственный метод isValid () в своем классе строкгде вы можете выполнить свою собственную логику проверки и фильтрации значений

1 голос
/ 19 ноября 2010

Модели в Zend являются не только представлениями объектов Db, большинство объектов фактически не имеют ничего общего с базой данных и являются моделями для бизнес-логики.В этом контексте использование метода глобальной проверки не имеет смысла.Zend_Db_Table и Row сделают некоторые проверки для вас при игре с объектом db, например, проверка того, что является первичным ключом, но если вы хотите что-то вроде Active Record, вам придется расширять эти классы самостоятельно.

0 голосов
/ 20 ноября 2010

Я не согласен с тем, что db-layer (объекты ZF Table, Row) является подходящим местом для проверки. Проверка IHMO - это логика приложения или ограничение бизнеса.

Процесс валидации должен быть помещен в конкретную модель. Слой БД должен быть чистым и отвечает только за простую операцию с базой данных (вставка, обновление, удаление, выбор).

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

Как сказал Эльзо - некоторые модели не представляют объекты БД - поэтому вы должны настроить интерфейс IPersistenceable , который имеет один метод validate для моделей на основе базы данных. Эти модели должны реализовывать собственный алгоритм проверки.

Этот подход полезен - каждая модель может иметь различные способы проверки. Следующий подход - вы можете создать абстрактный класс с базовой валидацией первичного ключа + метод validate, и каждая стойкая модель расширяет этот класс.

...