-[Интернационализация (Intl)](http://php.net/manual/ru/book.intl.php); Yii 2.0 использует расширение PHP `intl`
-[Интернационализация (intl)](http://php.net/manual/ru/book.intl.php); Yii 2.0 использует расширение PHP `intl`
для различного функционала интернационализации.
для различного функционала интернационализации.
Пространства имен
Пространства имён
-----------------
---------------
Одним из основных изменений в Yii 2.0 является использование пространств имён. Почти каждый класс фреймворка
находится в пространстве имён, например, `yii\web\Request`. Префикс "С" в именах классов больше не используется.
Имена классов соответствуют структуре директорий. Например, `yii\web\Request` указывает, что соответсвующий класс
находится в файле `web/Request.php` в директории фреймворка.
Одним из основных изменений в Yii 2.0 является использование пространств имен. Почти каждый класс фреймворка
Благодаря загрузчику классов Yii, вы можете использовать любой класс фреймворка без необходимости непосредственно
находится в пространстве имен, например, `yii\web\Request`. Префикс "С" больше не используется в именах классов.
подключать его.
Соглашение именования классов следует структуре папки, в которой располагается класс. Например, `yii\web\Request`
означает, что соответсвующий класс находится в файле `web/Request.php` в папке Yii фреймворка.
(Благодаря загрузчику классов Yii, вы можете использовать любой класс фреймворка без необходимости непосредственно
подключать его).
Компонент и Объект
Компонент и объект
------------------
----------------
В Yii 2.0 класс `CComponent` из версии 1.1 был разделен на два класса: [[yii\base\Object]] и [[yii\base\Component]].
В Yii 2.0 класс `CComponent` из версии 1.1 был разделён на два класса: [[yii\base\Object]] и [[yii\base\Component]].
Класс [[yii\base\Object|Object]] является простым базовым классом, который позволяет использовать[геттеры и сеттеры](concept-properties.md) для свойств.
Класс [[yii\base\Object|Object]] является простым базовым классом, который позволяет использовать
Класс [[yii\base\Component|Component]] наследуется от класса [[yii\base\Object|Object]] и поддерживает [события](concept-events.md) и
[геттеры и сеттеры](concept-properties.md) для свойств. Класс [[yii\base\Component|Component]] наследуется от
[поведения](concept-behaviors.md).
класса [[yii\base\Object|Object]] и поддерживает [события](concept-events.md) и [поведения](concept-behaviors.md).
Если вашему классу не нужно использовать функционал событий или поведений, вы можете использовать [[yii\base\Object|Object]] в качестве
Если вашему классу не нужны события или поведения, вы можете использовать [[yii\base\Object|Object]] в качестве
базового класса. В основном это случаи, когда классы представляют собой базовые структуры.
базового класса. В основном это относится к классам, представляющим собой базовые структуры данных.
Конфигурация объекта
Конфигурация объекта
--------------------
------------------
Класс [[yii\base\Object|Object]] предоставляет единый способ конфигурирования объектов. Любой дочерний класс
[[yii\base\Object|Object]] может определить конструктор (если нужно) как показано ниже. Это позволит конфигурировать
его универсально:
Класс [[yii\base\Object|Object]] предоставляет единый способ конфигурирования объектов. Любой дочерний класс [[yii\base\Object|Object]]
может определить конструктор (если нужно) для своей конфигурации следующим образом:
Yii 2.0 осуществляет жадную загрузку (eager loading) связи по другому, в отличие от версии 1.1. В частности, в версии 1.1 для
Yii 2.0 осуществляет жадную загрузку связи не так, как это было в 1.1. В частности, в версии 1.1 для выбора данных из
выбора данных из основной и связанной таблиц будет использован запрос JOIN. В Yii 2.0 будут выполнены два запроса без использования JOIN:
основной и связанной таблиц будет использован запрос JOIN. В Yii 2.0 будут выполнены два запроса без использования JOIN:
первый запрос возвращает данные для основной таблицы, а второй - для связанной, с помощью фильтрации по первичным ключами основной таблицы.
первый запрос возвращает данные для основной таблицы, а второй, осуществляющий фильтрацию по первичным ключами основной
таблицы — для связанной.
Вместо того, чтобы возвращать объекты [[yii\db\ActiveRecord|ActiveRecord]], вы можете использовать метод [[yii\db\ActiveQuery::asArray()|asArray()]]
Вместо того, чтобы при выборке большого количества записей возвращать объекты [[yii\db\ActiveRecord|ActiveRecord]], вы
при построении запроса, для выборки большого количества записей. Это заставит вернуть результат запроса в качестве массива, что
можете использовать в построении запроса метод [[yii\db\ActiveQuery::asArray()|asArray()]]. Это заставит вернуть
может существенно снизить время, нужное ЦПУ и память, при большом количестве записей. Например:
результат запроса в виде массива, что при большом количестве записей может существенно снизить затрачиваемое процессорное
время и объём потребляемой памяти. Например:
```php
```php
$customers = Customer::find()->asArray()->all();
$customers = Customer::find()->asArray()->all();
```
```
Еще одно изменение связано с тем, что вы больше не можете определять значения по-умолчанию в качестве свойств.
Ещё одно изменение связано с тем, что вы больше не можете определять значения по-умолчанию через public свойства.
Вы должны установить их в методе `init` вашего класса, если это требуется.
Вы должны установить их в методе `init` вашего класса, если это требуется.
```php
```php
...
@@ -453,22 +456,54 @@ public function init()
...
@@ -453,22 +456,54 @@ public function init()
}
}
```
```
Также в версии 1.1 были некоторые проблемы с переопределением конструктора ActiveRecord. Данные проблемы не присутствуют
Также в версии 1.1 были некоторые проблемы с переопределением конструктора ActiveRecord. Данные проблемы отсутствуют
в версии 2.0. Обратите внимание, что при добавлении параметров в конструктор, вам возможно понадобится переопределить метод
в версии 2.0. Обратите внимание, что при добавлении параметров в конструктор, вам, возможно, понадобится переопределить метод
[[yii\db\ActiveRecord::instantiate()]]. Переопределение может не потребоваться, если параметры, передаваемые в конструктор будут
[[yii\db\ActiveRecord::instantiate()]].
иметь значения по-умолчанию, например `null`.
Существует также множество других улучшений в ActiveRecord. Подробнее о них можно узнать в разделе
«[Active Record](db-active-record.md)».
Существует также множество других улучшений в ActiveRecord. Более детальная информация о конфигурация представлена в разделе [Active Record](db-active-record.md).
Поведения Active Record
-----------------------
В версии 2.0 отсутствует базовый класс для поведений `CActiveRecordBehavior`. Если вам необходимо создать поведение для
Active Record, стоит наследовать его класс напрямую от `yii\base\Behavior`. Если поведение должно реагировать на какие-либо
события, необходимо перекрыть метод `events()` следующим образом:
Класс `CWebUser` в версии 1.1 теперь заменен классом [[yii\web\User]], а также больше не существует класса `CUserIdentity`.
Класс `CWebUser` из версии 1.1 теперь заменён классом [[yii\web\User]]. Также больше не существует класса `CUserIdentity`.
Вместо этого, вы должны предоставить реализацию интерфейса [[yii\web\IdentityInterface]], что гораздо проще в использовании.
Вы должны реализовать интерфейс [[yii\web\IdentityInterface]], что гораздо проще. Пример реализации представлен в шаблоне
приложения advanced.
Более детальная информация представлена в разделах [Аутентификация](security-authentication.md), [Авторизация](security-authorization.md)
Более подробная информация представлена в разделах «[Аутентификация](security-authentication.md)»,
и [Шаблон приложения advanced](tutorial-advanced-app.md).
«[Авторизация](security-authorization.md)» и «[Шаблон приложения advanced](tutorial-advanced-app.md)».
Разбор и генерация URL
Разбор и генерация URL
...
@@ -476,7 +511,7 @@ public function init()
...
@@ -476,7 +511,7 @@ public function init()
Работа с URL в Yii 2.0 аналогична той, что была в версии 1.1. Основное изменение заключается в том, что теперь
Работа с URL в Yii 2.0 аналогична той, что была в версии 1.1. Основное изменение заключается в том, что теперь
поддерживаются дополнительные параметры. Например, если у вас имеется правило, объявленное следующим образом, то
поддерживаются дополнительные параметры. Например, если у вас имеется правило, объявленное следующим образом, то
оно совпадет с `post/popular` и `post/1/popular`. В версии 1.1, вам пришлось бы использовать два правила, для получения
оно совпадет с `post/popular` и `post/1/popular`. В версии 1.1, вам пришлось бы использовать два правила, для достижения
того же результата.
того же результата.
```php
```php
...
@@ -487,9 +522,10 @@ public function init()
...
@@ -487,9 +522,10 @@ public function init()
]
]
```
```
Более детальная информация представлена в разделе [Разбор и генерация URL](runtime-url-handling.md).
Более детальная информация представлена в разделе «[Разбор и генерация URL](runtime-url-handling.md)».
Использование Yii 1.1 вместе с 2.x
Использование Yii 1.1 вместе с 2.x
----------------------------------
----------------------------------
Информация об использовании кода для Yii 1.1 вместе с Yii 2.0 представлена в разделе [Одновременное использование Yii 1.1 и 2.0](extend-using-v1-v2.md).
Информация об использовании кода для Yii 1.1 вместе с Yii 2.0 представлена в разделе
«[Одновременное использование Yii 1.1 и 2.0](extend-using-v1-v2.md)».