В данной версии исправлено около сотни ошибок, сделано более двухсот улучшений и имеются новые возможности. Она является результатом пяти месяцев интенсивной разработки, если считать с беты. В течение этого времени нам активно помогало сообщество фреймворка. Спасибо всем, кто помогал Yii и без кого этот релиз не состоялся бы. Вы лучшие!
Часто задаваемые вопросы
- Что значит 2.0 RC? RC значит Release Candidate, то есть последний релиз перед стабильным GA (General Availability). До него остались, главным образом, правки небольших проблем и документация.
- Когда будет стабильный релиз? Всё зависит от того, какие проблемы будут с RC. Предварительный план — сделать стабильный релиз примерно через две недели. Конечно, если RC покажет себя достаточно стабильным.
- Могу ли я использовать RC в своих проектах? Да. Мы настоятельно рекомендуем попробовать его в новых проектах и будем признательны за сообщения об ошибках и просто отзывы. Так как стабильный релиз будет скоро, мы не советуем использовать RC на боевых серверах потому как, хоть это и маловероятно, в стабильной версии всё ещё может быть поломана обратная совместимость.
- Есть ли документация по 2.0? Да, полное руководство, которое является самой полной документацией по 2.0 и документация по API — справочник, который поможет в использовании отдельных классов фреймворка.
- Как обновиться с 1.1 на 2.0? Читайте Upgrading from Yii 1.1. Сразу отметим, что 2.0 полностью переписан и обновление не является тривиальным. Если ваше приложение на 1.1 работает хорошо и стабильно, рекомендуем продолжать использовать 1.1, если конечно у вас нет дополнительного времени и ресурсов для обновления.
- Как обновиться с беты или альфы 2.0? Читайте инструкции в UPGRADE.
- Как следить за разработкой 2.0? Вся разработка происходит на GitHub: github.com/yiisoft/yii2. Чтобы получать информацию об изменениях, можно отметить проект звёздочкой. Также можете подписаться на наш Twitter twitter.com/yiiframework и присоединиться к группе Facebook.
Главные улучшения в 2.0 RC
В данном релизе имеется большое количество полезных изменений и улучшений. Ниже мы опишем самое важное. Полный список изменений можно найти в CHANGELOG. Если хотите узнать фреймворке в общем, читайте полное рукводство.
Безопасность
Несколько экспертов по безопасности, включая Tom Worster и Anthony Ferrara, помогли нам с проверкой кода фреймворка и передали множество замечаний и предложений. Tom помог переписать часть кода, что позволило улучшить генерацию ключей, использовать более стойкое шифрование, защититься от timing attack и многих других типов атак.
Для более удобной настройки хелпер Security
стал компонентом приложения security
. В результате обращаться к нему можно как Yii::$app->security->encrypt()
.
В дополнение сделан ряд небольших, но важных для безопасности изменений. Например, теперь httpOnly
включен для всех cookie по умолчанию, а CSRF токены можно хранить в сессиях вместо cookie если выставить yii\web\Request::enableCsrfCookie
в false
.
Работа с базой данных
Репликация и разделение чтения/записи
Репликация и разделение чтения/записи (read-write splitting) теперь поддерживаются ядром фреймворка. При репликации данные реплицируются с master серверов на slave сервера. Вся запись и обновления должны делаться на master серверах, а чтение можно производить со slave серверов. Для использования данной возможности настройте соединение с БД следующим образом:
[ 'class' => 'yii\db\Connection', // конфигурация для master 'dsn' => 'dsn for master server', 'username' => 'master', 'password' => '', // общая конфигурация для slave-ов 'slaveConfig' => [ 'username' => 'slave', 'password' => '', ], // список конфигураций slave-ов 'slaves' => [ ['dsn' => 'dsn для slave 1'], ['dsn' => 'dsn для slave 2'], ['dsn' => 'dsn для slave 3'], ], ]
С данной конфигурацией вы можете продолжать писать код как и раньше. Если запрос выбирает данные, автоматически будет использован один из slave-ов (для выбора сервера используется простой алгоритм балансирования нагрузки). Если запрос обновляет или вставляет данные, будет использован master.
Транзакции
Было сделано несколько улучшений на тему транзакций.
Во первых, вы можете работать с транзакциями в стиле callback-ов:
$connection->transaction(function() { $order = new Order($customer); $order->save(); $order->addItems($items); });
Что эквивалентно более длинному коду:
$transaction = $connection->beginTransaction(); try { $order = new Order($customer); $order->save(); $order->addItems($items); $transaction->commit(); } catch (\Exception $e) { $transaction->rollBack(); throw $e; }
Во вторых, транзакции вызывают несколько событий. Например, событие beginTransaction
вызывается соединением с БД при старте новой транзакции, а commitTransaction
вызывается при удачном коммите. Вы можете использовать эти события для различной пред- и постобработки.
Наконец, можно указывать уровень изоляции транзакции (например, READ COMMITTED
) при её старте:
$transaction = $connection->beginTransaction(Transaction::READ_COMMITTED);
Построение запроса
При построении запроса теперь можно использовать любые операторы. В примере ниже для условия age >= 30
используется оператор >=
. Yii должным образом экранируем имя поля, а для значения использует связывание параметра.
$query = new \yii\db\Query; $query->where(['>=', 'age', 30]);
При построении in
или not
можно использовать подзапросы:
$subquery = (new \yii\db\Query) ->select('id') ->from('user') ->where(['>=', 'age', 30]); // выбираем заказы, которые сделали клиенты старше 30 лет $orders = (new \yii\db\Query) ->from('order') ->where(['in', 'customer_id', $subquery]) ->all();
Управление ресурсами
Yii использует пакеты Bower и NPM, то есть jQuery, jQuery UI, Bootstrap, через Composer при помощи замечательного Composer Asset Plugin.
Из за этого изменения необходимо до использования Yii один раз поставить плагин:
php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta2"
Теперь при помощи следующей команды вы сможете установить пакет Bower jQuery в директорию vendor
:
php composer.phar require bower-asset/jquery:2.1.*
Подробнее о ресурсах написано в полном руководстве.
Форматирование данных
Мы значительно отрефакторили форматтеры данных yii\base\Formatter
и yii\i18n\Formatter
. Теперь существует только один класс yii\i18n\Formatter
. Новый форматтер предоставляет единый интерфейс вне зависимости от наличия на сервере PHP расширения intl. Если расширение не установлено, форматирование будет производиться средствами фреймворка и не будет поддерживать интернационализацию.
Также мы стандартизировали форматы даты и времени. Теперь используется, главным образом, формат ICU. Такие классы, как DateValidator
и JUI DatePicker
используют такой формат по умолчанию. Форматы PHP можно использовать через префикс php:
.
$formatter = Yii::$app->formatter; $value = time(); echo $formatter->asDate($value, 'MM/dd/yyyy'); // эквивалентно date('m/d/Y', $value) echo $formatter->asDate($value, 'php:Y/m/d'); // эквивалентно date('Y/m/d', $value) echo $formatter->asDate($value, 'long'); // эквивалентно date('F j, Y', $value)
Формы
Улучшения коснулись и JavaScript компонента ActiveForm
.
Вместо использования callback-ов по ходу выполнения валидации теперь вызываются события. Использовать их довольно просто:
$('#myform').on('beforeValidate', function (event, messages, deferreds) { // Вызывается до валидации всей формы сразу после нажатия submit. // Тут можно провести дополнительные проверки. }); $('#myform').on('beforeSubmit', function () { // Вызывается после удачной валидации всех полей и до того как форма отправляется на северер. // Тут можно отправить форму через AJAX. Не забудьте вернуть false для того, чтобы форма не отправлялась как обычно. });
Также поддерживается отложенная валидация. В примере выше параметр deferreds
для события beforeValidate
позволяет добавить новый объект Deferred. FileValidator
и ImageValidator
теперь поддерживают валидацию на клиенте именно благодаря отложенной валидации.
Некоторые методы в JavaScript коде ActiveForm
стали частью API, что позволяет легче создавать динамичные формы с поддержкой валидации добавляемых полей на стороне клиента. К примеру, следующий JavaScript код может быть использован для валидации только что добавленного поля «address»:
$('#myform').yiiActiveForm('add', { 'id': 'address', 'name': 'address', 'container': '.field-address', 'input': '#address', 'error': '.field-address .help-block' });
Логирование и обработка ошибок
Вы можете использовать массивы и объекты как данные при логировании. Все включенные по умолчанию в фреймворк цели логов автоматически конвертируют их в текстовое представление. В своём классе цели лога можно обрабатывать такие данные специальным образом.
InvalidCallException
, InvalidParamException
, UnknownMethodException
теперь наследуются от BadMethodCallException
из SPL, что делает иерархию исключений более логичной.
При отображении исключений теперь показываются аргументы методов в стектрейсе.
Инструменты разработчика
Отладчик Yii — очень полезный инструмент, который показывает детальную информацию о ходе выполнение приложения. Мы добавили в него новую панель, которая показывает загруженные бандлы ресурсов и их содержимое.
Генератор кода Gii теперь можно использовать из консоли. Ранее предоставлялся только веб интерфейс, который хоть и очень интуитивен, не нравится хардкорным консольщикам. Теперь довольны должны быть все. Более того, код генераторов не изменился. При создании своего генератора не надо делать двойной работы: и консоль и веб используют один и тот же код.
Чтобы попробовать Gii в консоли, запустите следующие команды:
# перейдите в базовую директорию приложения cd path/to/AppBasePath # смотрим справку по Gii yii help gii # смотрим справку по генератору моделей yii help gii/model # генерируем модель City на основе таблицы city yii gii/model --tableName=city --modelClass=City
Поведения
Мы добавили новое поведение yii\behaviors\SluggableBehavior
, которое позволяет заполнить определённый атрибут модели транслитерированной готовой к использованию в URL версией строки. Использовать его можно следующим образом:
use yii\behaviors\SluggableBehavior; public function behaviors() { return [ [ 'class' => SluggableBehavior::className(), 'attribute' => 'title', // 'slugAttribute' => 'alias', // храним строку для URL (или slug) в поле "alias" // 'ensureUnique' => true, // нам нужны только уникальные slug-и ], ]; }
Поведения теперь могут присоединяться анонимно:
$component->attachBehaviors([ 'myBehavior1' => new MyBehavior, // именованное поведение MyBehavior::className(), // анонимное поведение ]);
Шаблонные движки
Расширения Smarty и Twig были существенно улучшены. Для каждого из них был введён специальный синтаксис для многих возможностей Yii, что, судя по отзывам, позволяет работать с Smarty и Twig так же эффективно, как с обычными шаблонами PHP. Подробнее о новом синтаксисе можно узнать в полном руководстве.
Документация на Русском
Документация частично переведена на Русский, но вариант перевода не окончательный и читать её можно либо напрямую с GitHub, либо сгенерировав HTML самостоятельно. Огромное спасибо
русскоязычному сообществу за непосредственное участие в переводе.
ссылка на оригинал статьи http://habrahabr.ru/post/238447/
Добавить комментарий