Когда Composer ещё не стал стабильным, API его довольно часто менялось. Из за этого отваливались плагины. Одним из самых ярких примеров был постоянно ломавшийся fxp/composer-asset-plugin
, используемый в Yii 2.0 и попивший немало крови. С релизом Composer проблема практически ушла, но к Yii 2.1, из за скорости установки и самой необходимости ставить плагин, было решено исследовать альтернативы. fxp, как и прежде, работает не быстро.
-
Yii, fxp и Asset packagist
12 августа 2016
-
Попробовал школу английского EnglishDom
31 июля 2016
Пару месяцев назад мне написали из школы английского EnglishDom и предложили их попробовать. Как-то давно у меня и Антона Исайкина была идея запустить подобную школу, работающую исключительно удалённо, но в процессе стало ясно, что мы это не потянем. Так вот, чтобы удовлетворить свой интерес и заодно проверить, можно ли рекомендовать учить там английский IT-шникам, я согласился.
-
Yii на WebCamp 2016 в Одессе
23 июля 2016
29-31 июля в Одессе пройдёт конференция WebCamp. В секции PHP выступит Дмитрий Науменко (SilverFire) из команды Yii с докладом «Рецепты для Yii 2».
Каждая технология имеет свои особенности, зная которые, можно создавать хороший код, который не стыдно показывать людям и удобно поддерживать. Рассмотрим хорошие идеи для Yii 2, пройдёмся по неудачным, научимся организовать структуру проекта, использовать модульный подход при разработке.
-
Когда уместен Active Record в Yii 2
22 июля 2016
В комментариях к посту про модули Дмитрий задал вопросы про AR.
Объем записей в таблицах от 500к, почти каждый запрос это 2-3 JOINa. Раньше делал через геттеры AR, выборка за раз порядка 100 записей. Но заметил такую штуку, что если использовать createCommand, то память заметно меньше расходуется и скорость быстрее. К сожалению, сейчас не могу показать реальные тесты, так как тестировали это месяц назад, но в итоге, большую часть моделей мы переписали на DAO, отказавшись от AR.
Память уходит на хранение данных в объектах. Скорость теряется из за необходимости эти объекты инстанциировать.
Так, так ли плох AR или его использование подходит для небольших проектов? У нас также постоянно идет вставка, порядка 5000 записей в час. Пока для этого используем AR.
Когда использование AR уместно, а когда нет?
AR отлично подходит для удаления, обновления или добавления небольшого количества записей по одной за раз. Чрезвычайно удобно. К тому же, поддержка dirty attributes, то есть сохранения только того, что изменилось, позволяет хорошо разгрузить базу данных и скрыть до лучших времён многие моменты при параллельном редактировании. Если у вас в приложении нет сильно сложной логики и не требуется дополнительных абстракций для сущности, то AR для этого подходит идеально.
Для простых выборок с целью отображения до сотни записей на страницу, в принципе, AR тоже подходит. Да, с массивами через query builder или с
asArray()
получается быстрее и меньше кушает памяти, но работать с ними не столь удобно.Для сложных выборок AR не рекомендуется. Сложные выборки у нас обычно возвращают какие-либо агрегаты или преобразованные данные, которые ну никак не вписываются в изначальную модель AR. В этом случае лучше делать выборки через query builder.
Для импорта-экспорта также лучше использовать query builder.
-
Видео моего доклада по безопасности с Deep Refactoring
18 июля 2016
В Воронеже несколько раз в месяц мы собираемся небольшой компанией, которую окрестили клубом «Deep Refactoring», рассказываем интересное из мира IT в виде доклада и горячо обсуждаем после. В начале месяца я рассказывал «Безопасность: от базовых принципов до особенностей PHP». Доклад я первый раз прочитал на английском в Стамбуле, затем на DevConf и последний раз в клубе.
Слайды всё те же с DevConf, а вот рассказ отличается. Во-первых, рассказывал в небольшой компании, так что задавали вопросы по ходу и меняли ход рассказа. Во-вторых, дело было в пабе :)
Слушайте на YouTube. Посмотреть особо не удастся. Темно.
Кстати, докладов было прочитано за время существования клуба уже не мало, все их можно посмотреть там же на YouTube.
-
Yii 2.0.9
11 июля 2016
Релизнули Yii 2.0.9. Анонс можно прочитать на хабре.
Выпустили немного раньше запланированного. Ничего сверхважного при этом на следующий релиз не перекинули, что, по-моему, прекрасно.
-
Встреча Intellectsoft по Yii 2, Codeception и тестированию в Киеве
5 июля 2016
13 июля Intellectsoft с 18:00 по 22:00 организуют встречу по Yii 2, Codeception и тестированию. Пройдёт она по адресу Киев, Лейпигская 15, БЦ MERX-2. Встречу ведёт Михаил Бондарчук, автор Codeception.
-
Как получить mock из ActiveRecord
5 июля 2016
На тостере в комментариях к вопросу спросили, как получить mock ActiveRecord, чтобы он не пытался лезть в базу и возможно ли.
Возможно. В случае PHPUnit делается так:
$post = $this->getMockBuilder('\app\model\Post') ->setMethods(['save', 'attributes']) ->getMock(); $post->method('save')->willReturn(true); $post->method('attributes')->willReturn([ 'id', 'status', 'title', 'description', 'text' ]);
Особенность заключается в том, что перекрыть надо ещё и метод
attributes()
потому как ActiveRecord лезет за схемой в базу данных, что нам не нужно. -
Вышел официальный HTTP клиент для Yii 2
1 июля 2016
Выпустили официальное расширение-клиент HTTP. Написано почти целиком Павлом Климовым. До последнего времени не было тегнуто как релиз из за несовместимости с PSR-7, хотя уже много где использовалось. После долгих обсуждений всё-таки решили выпускать без PSR-7. К нему, возможно, вернёмся в 2.1.x.
Выполнение HTTP запроса выглядит вот так:
use yii\httpclient\Client; $client = new Client(); $response = $client->createRequest() ->setMethod('post') ->setUrl('http://example.com/api/1.0/users') ->setData(['name' => 'John Doe', 'email' => '[email protected]']) ->send(); if ($response->isOk) { $newUserId = $response->data['id']; }
-
Выпущена версия 2.1.0 расширения для MongoDB
27 июня 2016
Выпущена версия 2.1.0 расширения для MongoDB, которая использует новый драйвер MongoDB . Расширение отлично работает с PHP 7.x и HHVM.
Данная версия не совместима с 2.0.x, поэтому стоит сначала прочитать UPGRADE и обновить свой код.
Если вы хотите остаться на
2.0.x
, удостоверьтесь, что в вашемcomposer.json
версия указана как~2.0.5
. Подробнее о версиях можно узнать из документации Composer.Кроме нового драйвера в данной версии есть и некоторые улучшения, такие как пакетное чтение и пакетная запись данных. Подробнее о них можно узнать из CHANGELOG.