Очистка не пройденных валидацию атрибутов

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
sergey144010
Сообщения: 12
Зарегистрирован: 2015.03.22, 19:28

Очистка не пройденных валидацию атрибутов

Сообщение sergey144010 »

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

Например:

Код: Выделить всё

# Загружаем данные в модель
$model->load(Yii::$app->request->get());
# Здесь валидация:
if($model->validate()){
    //  'Ok'
}else{
    //  'errors;
};
# Но если некоторые атрибуты не валидны, то они в модели всё также загружены
print_r ($model->attributes);
 
Здесь добавляем возможность очистки атрибутов

Код: Выделить всё

# Загружаем данные в модель
$model->load(Yii::$app->request->get());
# Здесь валидация:
if($model->validate()){
    //  'Ok'
}else{
    //  'errors;
    # Сбрасываем все атрибуты
    // $model->cleanAttributes();
    # Или очищаем не пройденные валидацию атрибуты
    $model->cleanAttributes($model->errors);
};
# Теперь атрибуты сброшены
print_r ($model->attributes);
 
Сам метод очистки

Код: Выделить всё

    public function cleanAttributes( Array $attributes=null)
    {
        if(isset($attributes)){
            foreach($attributes as $attribute=>$value){
                $this->$attribute = false;
            };
        }else{;
            foreach($this->getAttributes() as $attribute=>$value){
                $this->$attribute = false;
            };
        };
    }
 
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Очистка не пройденных валидацию атрибутов

Сообщение maleks »

смысл от этого? что этот false будет означать? Типы то полей имеют разные.
Эти значения не сбрасыаются потому что в форме отображаются то что введено неверно чтобы исправили.
Вам зачем?
Yii2 universal module sceleton - for basic and advanced templates
sergey144010
Сообщения: 12
Зарегистрирован: 2015.03.22, 19:28

Re: Очистка не пройденных валидацию атрибутов

Сообщение sergey144010 »

Чтобы модели имели возможность сбрасывать не валидные атрибуты или все атрибуты. В тех случаях, когда эта возможность не нужна, просто не используем данный метод.
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Очистка не пройденных валидацию атрибутов

Сообщение mickgeek »

Может идти от обратного? Когда нужны очищенные атрибуты, просто создаём новую модель?
sergey144010
Сообщения: 12
Зарегистрирован: 2015.03.22, 19:28

Re: Очистка не пройденных валидацию атрибутов

Сообщение sergey144010 »

mickgeek писал(а):Может идти от обратного? Когда нужны очищенные атрибуты, просто создаём новую модель?
Это если все атрибуты сбросить. А если оставить валидные, а не валидные сбросить?
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Очистка не пройденных валидацию атрибутов

Сообщение mickgeek »

Код: Выделить всё

$model = new Post();
if ($model->load(Yii::$app->request->post())) {
    $model->validate();
    $passedAttributes = [];
    foreach ($model->attributes as $name => $value) {
        if (!$model->hasErrors($name)) {
            $passedAttributes[$name] = $value;
        }
    }
    $newModel = new Post($passedAttributes);
} 
Задача тривиальная и редкая. Не думаю, что этот функционал нужен в Yii.
sergey144010
Сообщения: 12
Зарегистрирован: 2015.03.22, 19:28

Re: Очистка не пройденных валидацию атрибутов

Сообщение sergey144010 »

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