После трёх лет интенсивной разработки и почти 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 поддерживаются свойства объектов через геттеры и сеттеры, конфигурации, события и поведения. Новый код более эффективен и выразителен. К примеру, обработать событие вы можете следующим образом:
В 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.
Следующий код показывает выборки связанных данных через Active Record:
Ниже мы обновляем запись о клиенте. При этом используется связывание параметров, что практически исключает возможность SQL инъекции. В базу сохраняются только изменённые данные.
Yii 2.0 поддерживает множество баз данных. Помимо традиционно используемых реляционных баз добавлена поддержка Cubrid, ElasticSearch и Sphinx. Также поддерживаются и NoSQL хранилища, такие как Redis и MongoDB. Для доступа ко всем этим базам данных, как через построитель запросов, так и через Active Record используется тот же самый API, что позволяет легко перейти от использования одного хранилища, к использованию другого. При использовании Active Record можно строить связи между данными из разных баз (например, между MySQL и Redis).
Для приложений с большими базами и высокими требованиями к производительности в Yii 2.0 реализована поддержка репликации БД и разделение чтения/записи.
Yii позволяет получить рабочий и совместимый с последними протоколами RESTful API написав всего пару строчек кода. Пример ниже показывает создание RESTful API для данных пользователя.
Сначала создаём контроллер
Далее изменяем конфигурацию компонента
Готово! API, который был только что создан, поддерживает:
Попробовать API можно при помощи
Как и в версии 1.1, в Yii 2.0 отличная поддержка кеширования как на стороне сервера (фрагменты, запросы), так и на стороне клиента (HTTP). Есть драйверы для многих хранилищ, в том числе APC, Memcache, файлы, базы данных и т.д.
В Yii 1.1 можно быстро создать HTML формы с поддержкой как клиентской, так и серверной валидации. Во второй версии сделать это ещё проще. В примере ниже показано создание формы логина.
Сначала создаётся модель
Далее создаём view:
Как и в версии 1.1, в Yii 2.0 есть встроенная возможность аутентификации и авторизации пользователя. Поддерживаются вход, выход, аутентификация на основе cookie и токена, фильтр контроля доступа и контроль доступа на основе ролей (RBAC).
Также есть возможность входа через внешние сервисы по OpenID, OAuth1 и OAuth2. Есть и готовая поддержка популярных сервисов, таких как Facebook, GitHub, Google, Twitter, Вконтакте и Яндекс.
Для построения интерактивных пользовательских интерфейсов в состав фреймворка включено довольно много готовых элементов, называемых виджетами. Есть поддержка виджетов Bootstrap и jQuery UI. Помимо этого, предоставляются такие часто используемые элементы как постраничная разбивка, грид, список и т.д. Все они делают разработку веб приложения действительно быстрым и приятным процессом. Например, используя следующий код можно получить полностью рабочий элемент jQuery UI для выбора даты на русском:
Для упрощения частых задач в фреймворке имеются хелперы. Например, в хелпере
Так как фреймворк используется по всему миру, мы позаботились о хорошей поддержке интернационализации. Поддерживаются перевод сообщений и перевод view, основанные на локали множественные формы и форматирование данных по стандарту ICU. Например:
По умолчанию 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. Если это не так, стоит его установить.
Стоит отметить, что в процессе установки Composer может потребовать логин и пароль от GitHub для генерации токена, который позволяет преодолеть ограничения на количество запросов к API.
После выполнения команд выше вы можете начинать работать с веб приложением, доступным по URL
Если вы обновляетесь с предыдущих версий 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.
Ваша поддержка неоценима!
Как вы, возможно, уже знаете, Yii 2.0 был переписан с нуля. Это решение было принято, так как мы хотели получить отличный PHP фреймворк, который сохранит простоту и расширяемость Yii и, в то же время, будет использовать свежие технологии и возможности, чтобы стать ещё лучше. Сегодня мы рады сообщить, что цель достигнута.
Немного полезных ссылок про Yii и Yii 2.0:
- Официальный сайт Yii
- Yii 2.0 на GitHub: для того, чтобы следить за разработкой проекта, можно поставить звёздочку и/или использовать кнопку watch.
- Группа на Facebook
- yiiframework.ru
Далее мы рассмотрим самые интересные возможности новой версии. Если вы спешите попробовать фреймворк в деле, начните с чтения раздела руководства 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: <http://localhost/users?page=1>; rel=self,
<http://localhost/users?page=2>; rel=next,
<http://localhost/users?page=50>; 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;
<?php $form = ActiveForm::begin() ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= Html::submitButton('Login') ?>
<? ActiveForm::end() ?>
Аутентификация и авторизация
Как и в версии 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
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.
Ваша поддержка неоценима!