[v0.1b] StatusBehavior

Выкладываем свои наработки
Ответить
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

[v0.1b] StatusBehavior

Сообщение slavcodev »

Решил сделать поведение для моделей, которым нужен статус, например статус постов.

Пока выкладываю ссылку в гуглкод, для неспящих :)
Более подробное описание дам завтра как проснусь.

исходники

Юзаем

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

class Post extends CActiveRecord {
    public function behaviors() {
        return array(
            'statuses' => array(
                'class' => 'ext.CStatusBehavior.CStatusBehavior',
                'statusField' => postStatus,
            ),
        );
    }
} 

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

$post=Post::model()->findByPk(1);
echo $post->getStatus();
$post->setStatus('draft');
if ($post->save() === FASLE) {
 echo 'ошибки сохранения';
} 
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.1a] StatusBehavior

Сообщение samdark »

В setStatus планируется валидация значений?
Что такое statusShift? Статусы будут храниться как битовая маска?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: [v0.1a] StatusBehavior

Сообщение slavcodev »

Sam Dark писал(а):В setStatus планируется валидация значений?
А какая еще может быть валидация, кроме есть ли статус в разрешенных?
Sam Dark писал(а):Что такое statusShift?
Ввел этот параметр совместимости с моей базой, где статусы начинаются с 1 (база из примера о блоге) а здесь используются индексы массива разрешенных статусов начиная с нуля. Думаю в будущих версиях этот сдвиг я уберу.
Sam Dark писал(а):Статусы будут храниться как битовая маска?
для чего эта маска могла быть нужна? для нескольких статусов?
планировал сделать простой статус, передаешь поведению массив статусов, индексы массива это значения которые будут писаться в базу (могут быть не только числа, хотите можете и слова записывать) а значения массива сам текстовый статус который планируется выводится пользователю (плюс использование i18n для вывода)
Жду Yii 3!
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: [v0.1a] StatusBehavior

Сообщение Ekstazi »

Лично я использую enum в БД, а битовая маска не всегда хорошо сказывается на качестве кода.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: [v0.1a] StatusBehavior

Сообщение slavcodev »

обновил исходник
добавил setStatus, который проверяет только разрешен или нет статус, остальная валидация ИМХО лучше реализовать через валидацию модели.
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.1a] StatusBehavior

Сообщение samdark »

Эту валидацию я и имел ввиду.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: [v0.1b] StatusBehavior

Сообщение slavcodev »

"эту" это все таки какую? :)
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: [v0.1b] StatusBehavior

Сообщение samdark »

Которая попроще: только сверка с конфигом.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: [v0.1b] StatusBehavior

Сообщение slavcodev »

ну это само собой, ради чего тогда вообще массив в конфиге :)
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: [v0.1b] StatusBehavior

Сообщение slavcodev »

обновил исходник
добавил метод saveStatus, будет сохранен только атрибут статуса а не вся модель.

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

$post = Post::model()->findByPk(1);
$post->setStatus('draft')->saveStatus(); 
Жду Yii 3!
Ответить