Re: r2098 - trunk/core/Form/Primitives

From: Ivan Khvostishkov <dedmajorAT@AToemdesign.ru>
Date: Mon, 15 Dec 2008 19:06:40 +0300

On Mon, Dec 15, 2008 at 06:24:29PM +0300, Konstantin V. Arkhipov wrote:
> > вопросы, комментарии?
> глянь trunk. там уже нет getDefault/getActual и после неудачного импорта
> значение устанавливается в последнее валидное.

ок, пусть останется поведение только второго типа - транзакция.

при желании пользователь вручную может сбросить ошибочные примитивы, реализовав
поведение первого типа.

тогда в транке есть ошибка:

                private function checkImportResult(BasePrimitive $prm, $value, $result)
                {
                        $name = $prm->getName();
                        
                        if (true === $result)
                                $prm->dropError();
                        else {
                                if (null === $result) {
                                        if ($prm->isRequired())
                                                $prm->setError(BasePrimitive::MISSING);
                                } else {
                                        $prm->setError(BasePrimitive::WRONG);
                                }
                                
                                if (null <> $value)
                                        $prm->setValue($value);
                        }
                        
                        return $this;
                }

запарывающий тесткейс:

1. optional примитив после импорта будет неопределен:
$form = Form::create()->add($primitive->optional())
$form->import(bad value)
$form->getValue() - undefined (поскольку import в конкретном примитиве может
поменять value, и значение не станет таким, каким было до иморта, то есть null).

также хочется, чтобы следущие кейсы проходили:

1. import и importMore - алиасы (+ isImported() уедет в dev/null за отсутствием
необходимости, все более понятно работать будет, и поменяется порядок
get/post/cookie с точностью до наоборот - сначала надо будет указывать наименее
приоритетные значение, а потом - более приоритетные, которые могут перезаписать
старые значение)

2. required без инициализации - это missing.

$form = Form::create()->add(Primitive::integer()->required())
$form->getErrors() - true

а также не понятна разница между null и false в Primitive.import:

                protected function import($scope)
                {
                        if (
                                !empty($scope[$this->name])
                                || (
                                        isset($scope[$this->name])
                                        && $scope[$this->name] !== ''
                                )
                        ) {
                                $this->raw = $scope[$this->name];
                                
                                return $this->imported = true;
                        }
                        
                        $this->clean();
                        
                        return null;
                }

коль мы можем import для примитива вызывать сколь угодно много раз - разницы
между missing и wrong не будет никакой до окончания всех импортов, см. кейс 2.

и еще вызов clean() тут под большим вопросом.

-- 
`< ~/.signature cat`
Received on Mon Dec 15 2008 - 19:06:40 MSK

This archive was generated by hypermail 2.2.0 : Tue Dec 16 2008 - 00:05:04 MSK