Как стать автором
Обновить
0
DataArt
Технологический консалтинг и разработка ПО

Yii2 bad behaviors

Время на прочтение2 мин
Количество просмотров8.9K
Минимальная версия PHP для Yii2 — 5.4. Минимальная версия PHP для Traits — 5.4. Совпадение? Не думаю!



Yii2 уже давно пора избавиться от этих плохих поведений. И вот почему.

Возьмём в качестве примера реализацию поведения SoftDelete для ActiveRecord с использованием PHP Traits. И рассмотрим по пунктам, что нам это даёт.

Бо́льший контроль над моделью
Очевидно, что помечая записи как «удалённые», вы расчитываете на то, что они не будут подтягиваться в результаты любых ваших запросов: Cat::find()->all(), Cat::find()->one(), и т.д. Yii1 позволяло реализовать такую функциональность в событии CActiveRecord::beforeFind(). Однако после основательной переработки ActiveRecord в Yii2, такого события по понятным причинам уже нет, и задача переходит в разряд нерешаемых, т.к. поведения могут работать только с событиями AR. Напротив, при использовании traits вы вольны переопределять любой метод модели, например, так:
public static function find()
{
    $query = parent::find();

    // Skip deleted items
    if (static::$softDelete) {
        $query->andWhere([static::tableName() . '.' . static::$softDeleteAttribute => null]);
    }

    return $query;
}


Полная поддержка IDE
Да, используя behaviors вы можете добавить в модель новый атрибуты, но IDE об этом ничего знать не будет, и ни о каком автокомплите речь даже не идёт. А вот при использовании traits, IDE отлично подхватывает все новые методы и свойства, в том числе виртуальные:
 * @property-read bool $isDeleted
 */
trait SoftDelete

И теперь свойство isDeleted будет подсвечиваться во всех объектах AR, к которым подключён trait SoftDelete:
class Cat extends ActiveRecord
{
    use \common\traits\SoftDelete;
}

$cat = (new Cat)->isDeleted; // Property "isDeleted" autocompleted by IDE


Минус один велосипед
С появлением traits, behaviors на самом деле стали велосипедом. И добросовестный разработчик, рискует весьма сильно пострадать, потратив немало времени на изучение этого заменителя traits, и попытки решить вышеизложенные проблемы. Это было действительно хорошим решением в Yii1, но сейчас это оверхед на ровном месте при изучении и использовании фреймворка. Пришло время попрощаться с ними.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Судьба behaviors в Yii2.1
62.67% Попрощаться136
37.33% Пускай остаются81
Проголосовали 217 пользователей. Воздержались 98 пользователей.
Теги:
Хабы:
Всего голосов 10: ↑6 и ↓4+2
Комментарии38

Публикации

Информация

Сайт
www.dataart.com
Дата регистрации
Дата основания
Численность
1 001–5 000 человек

Истории