Yii 2.0. Релиз

После трёх лет интенсивной разработки и почти 10000 коммитов более 300 авторов вышла стабильная версия PHP фреймворка Yii 2.0! Спасибо за поддержку и терпение! Как вы, возможно, уже знаете, Yii 2.0 был переписан с нуля. Это решение было принято, так как мы хотели получить отличный PHP фреймворк, который сохранит простоту и расширяемость Yii и, в то же время, будет использовать свежие технологии и возможности, чтобы стать ещё лучше. Сегодня мы рады сообщить, что цель достигнута.

Немного полезных ссылок про Yii и Yii 2.0:

Далее мы рассмотрим самые интересные возможности новой версии. Если вы спешите попробовать фреймворк в деле, начните с чтения раздела руководства Getting Started.

Самое интересноеСледование стандартам и использование последних технологий Yii 2.0 использует пространства имён и трейты PHP, стандарты PSR, Composer и Bower. Всё это делает работу с фреймворком более приятной. Сторонние библиотеки теперь использовать намного проще.

Надёжная основа Как и в 1.1, в Yii 2.0 поддерживаются свойства объектов через геттеры и сеттеры, конфигурации, события и поведения. Новый код более эффективен и выразителен. К примеру, обработать событие вы можете следующим образом:

$response = new yii\web\Response; $response→on ('beforeSend', function ($event) { // обрабатываем событие «beforeSend» }); В Yii 2.0 реализованы dependency injection container и service locator. При правильном использовании они делают приложения более гибкими и тестируемыми.

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

Отладчик Yii позволяет изучать детали работы вашего приложения. Он также может использоваться для профилирования производительности и поиска узких мест.

Как и в версии 1.1, в Yii 2.0 есть существенно экономящий время генератор кода Gii. Он отлично расширяется, что позволяет создавать свои генераторы. Работать с Gii можно как из браузера, так и из консоли.

Документация по API Yii 1.1 получила немало хвалебных отзывов. Многие хотели такой же документации для своих проектов, поэтому в Yii 2.0 включён генератор документации. Он поддерживает Markdown, что позволяет писать более лаконично и выразительно.

Безопасность Yii 2.0 помогает вам писать более безопасный код. В фреймворке имеются возможности для предотвращения SQL инъекций, XSS атак, CSRF атак, подделки cookie и т.д. Некоторые части кода были проверены экспертами по безопасности Tom Worster и Anthony Ferrara и впоследствии переписаны.

Базы данных Работа с базами данных никогда не была такой простой. В Yii 2.0 поддерживаются миграции, DAO, построитель запросов и Active Record. Если сравнивать с 1.1, в версии 2.0 улучшена производительность Active Record, а синтаксис для работы с ним такой же, как и при работе с построителем запросов. Ниже показано получение данных клиента при помощи построителя запросов и Active Record. В обоих случаях используется цепочка вызова методов, напоминающая SQL.

use yii\db\Query; use app\models\Customer;

$customers = (new Query)→from ('customer') →where (['status' => Customer: STATUS_ACTIVE]) →orderBy ('id') →all (); $customers = Customer: find () →where (['status' => Customer: STATUS_ACTIVE]) →orderBy ('id') →asArray (); →all (); Следующий код показывает выборки связанных данных через Active Record:

namespace app\models;

use app\models\Order; use yii\db\ActiveRecord;

class Customer extends ActiveRecord { public static function tableName () { return 'customer'; } // задаёт связь типа one-to-many с моделью Order public function getOrders () { return $this→hasMany (Order: className (), ['customer_id' => 'id']); } }

// возвращает клиента с id равным 100 $customer = Customer: findOne (100); // возвращает заказы клиента $orders = $customer→orders; Ниже мы обновляем запись о клиенте. При этом используется связывание параметров, что практически исключает возможность SQL инъекции. В базу сохраняются только изменённые данные.

$customer = Customer: findOne (100); $customer→address = '123 Anderson St'; $customer→save (); // выполнит SQL: UPDATE `customer` SET `address`='123 Anderson St' WHERE `id`=100 Yii 2.0 поддерживает множество баз данных. Помимо традиционно используемых реляционных баз добавлена поддержка Cubrid, ElasticSearch и Sphinx. Также поддерживаются и NoSQL хранилища, такие как Redis и MongoDB. Для доступа ко всем этим базам данных, как через построитель запросов, так и через Active Record используется тот же самый API, что позволяет легко перейти от использования одного хранилища, к использованию другого. При использовании Active Record можно строить связи между данными из разных баз (например, между MySQL и Redis).

Для приложений с большими базами и высокими требованиями к производительности в Yii 2.0 реализована поддержка репликации БД и разделение чтения/записи.

RESTful API Yii позволяет получить рабочий и совместимый с последними протоколами RESTful API написав всего пару строчек кода. Пример ниже показывает создание RESTful API для данных пользователя.

Сначала создаём контроллер app\controllers\UserController и указываем app\models\User в качестве модели данных:

namespace app\controllers;

use yii\rest\ActiveController;

class UserController extends ActiveController { public $modelClass = 'app\models\User'; }

Далее изменяем конфигурацию компонента urlManager так, чтобы использовать красивые URL:

'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user'], ], ] Готово! API, который был только что создан, поддерживает:

GET /users: список всех пользователей с постраничной разбивкой; HEAD /users: заголовки с информацией о списке пользователей; POST /users: создаёт нового пользователя; GET /users/123: информация о пользователе с id = 123; HEAD /users/123: заголовки с информацией о пользователе с id = 123; PATCH /users/123 и PUT /users/123: обновляет информацию пользователя с id = 123; DELETE /users/123: удаляет пользователя с id = 123; OPTIONS /users: возвращает поддерживаемые глаголы HTTP для /users; OPTIONS /users/123: возвращает поддерживаемые глаголы HTTP для /users/123. Попробовать API можно при помощи curl:

$ curl -i -H «Accept: application/json» «http://localhost/users»

HTTP/1.1 200 OK Date: Sun, 02 Mar 2014 05:31:43 GMT Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y X-Powered-By: PHP/5.4.20 X-Pagination-Total-Count: 1000 X-Pagination-Page-Count: 50 X-Pagination-Current-Page: 1 X-Pagination-Per-Page: 20 Link: ; rel=self, ; rel=next, ; rel=last Transfer-Encoding: chunked Content-Type: application/json; charset=UTF-8

[ { «id»: 1, … }, { «id»: 2, … }, … ] Кеширование Как и в версии 1.1, в Yii 2.0 отличная поддержка кеширования как на стороне сервера (фрагменты, запросы), так и на стороне клиента (HTTP). Есть драйверы для многих хранилищь, в том числе APC, Memcache, файлы, базы данных и т.д.

Формы В Yii 1.1 можно быстро создать HTML формы с поддержкой как клиентской, так и серверной валидации. Во второй версии сделать это ещё проще. В примере ниже показано создание формы логина.

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

use yii\base\Model;

class LoginForm extends Model { public $username; public $password;

/** * @return array the validation rules. */ public function rules () { return [ // username and password are both required [['username', 'password'], 'required'], // password is validated by validatePassword () ['password', 'validatePassword'], ]; }

/** * Validates the password. * This method serves as the inline validation for password. */ public function validatePassword () { $user = User: findByUsername ($this→username); if (!$user || !$user→validatePassword ($this→password)) { $this→addError ('password', 'Incorrect username or password.'); } } } Далее создаём view:

use yii\helpers\Html; use yii\widgets\ActiveForm;

field ($model, 'username') ?> field ($model, 'password')→passwordInput () ?> Аутентификация и авторизация Как и в версии 1.1, в Yii 2.0 есть встроенная возможность аутентификации и авторизации пользователя. Поддерживаются вход, выход, аутентификация на основе cookie и токена, фильтр контроля доступа и контроль доступа на основе ролей (RBAC).

Также есть возможность входа через внешние сервисы по OpenID, OAuth1 и OAuth2. Есть и готовая поддержка популярных сервисов, таких как Facebook, GitHub, Google, Twitter, Вконтакте и Яндекс.

Виджеты Для построения интерактивных пользовательских интерфейсов в состав фреймворка включено довольно много готовых элементов, называемых виджетами. Есть поддержка виджетов Bootstrap и jQuery UI. Помимо этого, предоставляются такие часто используемые элементы как постраничная разбивка, грид, список и т.д. Все они делают разработку веб приложения действительно быстрым и приятным процессом. Например, использую следующий код можно получить полностью рабочий элемент jQuery UI для выбора даты на русском:

use yii\jui\DatePicker;

echo DatePicker: widget ([ 'name' => 'date', 'language' => 'ru', 'dateFormat' => 'yyyy-MM-dd', ]);

Хелперы Для упрощения частых задач в фреймворке имеются хелперы. Например, в хелпере Html собраны методы для создания различных тегов HTML, а хелпер Url позволяет создавать различные URL:

use yii\helpers\Html; use yii\helpers\Url;

// создаёт список чекбоксов со странами echo Html: checkboxList ('country', 'USA', $countries);

// выводит URL »/index? r=site/index&src=ref1#name» echo Url: to (['site/index', 'src' => 'ref1', '#' => 'name']);

Интернационализация Так как фреймворк используется по всему миру, мы позаботились о хорошей поддержке интернационализации. Поддерживаются перевод сообщений и перевод view, основанные на локали множественные формы и форматирование данных по стандарту ICU. Например:

// переводим сообщение с форматированием даты echo \Yii: t ('app', 'Today is {0, date}', time ());

// переводим сообщение с множественными формами echo \Yii: t ('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', ['n' => 0]);

Шаблонизаторы По умолчанию Yii 2.0 использует в качестве языка шаблонов PHP, но также поддерживает Twig и Smarty через специальные расширения. Возможно создавать и свои расширения для поддержки других шаблонизаторов.

Тестирование Yii 2.0 официально поддерживает интеграцию с Codeception и Faker. В состав фреймворка включено решение для фикстур через миграции, что делает работу с данными для тестов более удобной.

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

Расширения Несмотря на то, что Yii 2.0 предоставляет много полезных возможностей, в нём реализована система расширений, что делает его ещё более мощным. Расширениями называются распространяемые отдельно пакеты, специально предназначенные для использования в приложениях Yii. Множество возможностей Yii уже вынесены в расширения, например отсылка почты и Bootstrap. На сайте Yii представлена большая пользовательская библиотека, насчитывающая на данный момент почти 1700 расширений. На packagist.org можно найти более 1300 пакетов для Yii.

Начало работы Для начала работы введите следующие команды:

# устанавливаем composer-asset-plugin глобально. Это нужно сделать один раз. php composer.phar global require «fxp/composer-asset-plugin:1.0.0-beta2»

# устанавливаем шаблон приложения basic php composer.phar create-project yiisoft/yii2-app-basic basic 2.0.0 Команды выше сработают, если у вас уже установлен Composer. Если это не так, стоит его установить.

Стоит отметить, что в процессе установки Composer может потребовать логин и пароль от GitHub для генерации токена, который позволяет преодолеть ограничения на количество запросов к API.

После выполнения команд выше вы можете начинать работать с веб приложением, доступным по URL http://localhost/basic/web/index.php.

Обновляемся Если вы обновляетесь с предыдущих версий Yii 2.0 (альфа, бета или RC), следуйте инструкциям.

Обновление с версии 1.1 безе переписывания кода приложения невозможно так как Yii 2.0 был полностью переписан и изменений синтаксиса очень много. Тем не менее, многие идеи сохранены, так что работать с 2.0, зная 1.1, будет проще. Большие изменения по сравнению с версией 1.1 подробно описаны в документации.

Документация Для Yii 2.0 доступно полное руководство и документация по API. Руководство переводится на множество языков. Переводы будут доступны немного позже. По Yii 2.0 уже вышла одна книга и пишутся ещё. Одна из книг будет написана известным техническим писателем Larry Ullman, который помогает нам с полным руководством. Александр Макаров координирует и редактирует книгу рецептов Yii 2.0, похожую на тепло принятую книгу рецептов Yii 1.1.

Спасибо Спасибо всем, кто принимал и принимает участие в разработке Yii.Ваша поддержка неоценима!

© Habrahabr.ru