В Ожидании Yii2 2.0.4

Как вы, наверное, догадались, я хочу поговорить о Yii2 и о том, что ждет новичков в стартапе, выбравшем этот фреймворк.

Ни для кого не секрет, что многие фреймворки используют компоненты Symfony, чтобы не изобретать новый велосипед. Многие, но не Yii, но в то же время Yii многое позаимствовал у Symfony и впитал лучшее от Ruby on Rails. По вопросам github часто можно увидеть предложения по расширению функциональности, заимствованной у этих фреймворков.

В этой статье мне бы хотелось описать именно те моменты, в которых разработчики Yii не согласны с разработчиками других фреймворков.



АктивРекорд

AR — это модель, которая представляет 1 запись в репозитории, но мало кто знает, что в Yii искатель тоже скрывается за статическими методами поиска и называется ActiveQuery.

Активный запрос

Давайте посмотрим на пример User::find()-> andWhere(['username' => 'ok'])-> one().

На первый взгляд все логично, за исключением того, что в расширенном шаблоне используется поле User::findByUsername('ok').

Но если в первом случае мы можем избавиться от класса User, передав в конструктор, например, $query = User::find()-> andWhere(/*something else*/), то в «коробочном» версии вам нужно добавить условие, расширить класс User и переопределить логику работы в методе найти по имени пользователя .

Стоит отметить, что ActiveQuery привязан к классу модели, и если вы хотите добавить область видимости по умолчанию, вам необходимо расширить модель и переопределить приведенный выше метод поиска:

   

public static function find() { return parent::find()->andWhere(['status' => 'active']); }

Чтобы наложить условие по умолчанию на ActiveQuery, нам нужно расширить ActiveRecord.

Правила или проверка

В Руководство по Ruby on Rails Об этом написано следующее:
1.1 Зачем использовать проверки? Проверки используются для обеспечения сохранения в вашей базе данных только действительных данных.

yiisoft/core-developers так не считают, и считают, что валидации подлежат только вводимые пользователем данные в форме, а все остальное — проблема в руках программиста, т.е.

вы должны сами перехватывать исключение pdo; если что-то вдруг пойдет не так, не ждите ошибок валидации.

Поэтому в коробке минимально проверяйте данные перед записью в базу данных.

Возможно, это связано с экономией производительности: — все валидаторы создаются сразу при инициализации модели, независимо от сценария; — визуализировать тип ввода = текст (о спичках).

Кстати о производительности.

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

Безопасность или производительность – каждый решает сам.

В расширенном окне приложений — продуктивность.

Но даже выбрав безопасность, можно смело забыть о «коробочном поведении атрибутов», которое привязан к событиям beforeInsert и beforeUpdate , и событие beforeValidate только одно, либо его нужно модернизировать стоимость имущества с проверкой $event-> sender-> isNewRecord. Также, выбрав безопасность, следует забыть о методе link, который должен связывать 2 модели друг с другом с помощью внешнего ключа.

Это связано с тем, что метод link сохраняет модель после «перелинковки» и такое поведение неизбежно, и сохранение выручки без валидации , поэтому вышеупомянутое поведение атрибутов не будет обработано, и мы получим исключение pdo, указывающее, что поле является обязательным.

Мы не можем выполнить проверку перед методом ссылки, поскольку существует валидатор внешних ключей.

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

Безопасность или вкусности из коробки – решать вам.



Активреляшн

Здесь мы поговорим о связи моделей или понятии модуля в Yii. Как известно, модуль — это самодостаточная единица приложения.

Давайте рассмотрим пример: соединив 2 модуля User и BankAccount, мы должны соединить модели User и UserAccount друг с другом.

Оставлю это вам в качестве домашнего задания, так как сами разработчики пока не могут на этот вопрос ответить.

Вот почему я думаю, что User и Rbac находятся в коробке yii, а не как расширения.

А пока давайте посмотрим на то, что было изобретено давным-давно.

симфония .

Тем, кто всерьез решил заняться «домашней работой», следует учитывать, что модели невозможно настроить по ряду причин, одна из них — создание модели, связанной ключом .

Если вы решили домашнее задание, попробуйте решить его еще раз, но без перекрытия обеих моделей модулей.

Скажем вместе, модули не нужны.

Будем считать эту статью законченной.

Кроме того, ниже будет еще несколько бонусов, но сначала хочу сказать, что я занимаюсь разработкой на этом фреймворке уже более 5 лет (начинал с yii 1.x) и он мне нравится своей возможностью настройки компонентов , но в yii2 он все больше завязан на Closure, что не позволяет обеспечить столь гибкую настройку, как хотелось бы.

Возможно, это связано с тем, что в сообществе много поклонников.

Ларавел ? Еще хотелось бы поблагодарить разработчиков yii2 за вклад и труд, первый блин всегда комом, второй лучше.



Бонусы

— Во всех языках программирования при вызове события можно передать ему параметры; в Yii параметры должны передаваться, когда висящий обработчик ; - Бывает и такое Вика учит «скотоводству»; - Мистика псевдонимы ( https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseFileHelper.php#L135 ).

Люблю Yii, помогите сообществу.

Если ваш вопрос был сразу отклонен, не расстраивайтесь.

Возможно, кто-то позже создаст подобный и его не отменят (были такие случаи).

Всем нужен чистый код, четкие комментарии в нем и отсутствие ошибок в тестах.

P.S. Я знаю, что некоторые yii-разработчики посещают этот ресурс, хочу перед ними извиниться.

Возможно я где-то соврал - буду рад любым комментариям ниже.

UPD: Предлагаемый вариант Зеленин habrahabr.ru/post/254179/#comment_8348781 имеет право на жизнь и даже вполне работоспособен, как по мне это странное поведение ди-контейнера.

Но благодаря такому поведению, думаю, удастся подружить 2 модели из разных модулей — о результатах напишу позже.

Теги: #yii2 framework #отслеживание ошибок #пересмотр кода #разработка веб-сайтов #идеальный код #Yii

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.