-[Интернационализация (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\web\Request`. Префикс "С" больше не используется в именах классов.
Соглашение именования классов следует структуре папки, в которой располагается класс. Например, `yii\web\Request`
означает, что соответсвующий класс находится в файле `web/Request.php` в папке Yii фреймворка.
(Благодаря загрузчику классов Yii, вы можете использовать любой класс фреймворка без необходимости непосредственно
подключать его).
Благодаря загрузчику классов Yii, вы можете использовать любой класс фреймворка без необходимости непосредственно
подключать его.
Компонент и Объект
------------------
Компонент и объект
----------------
В Yii 2.0 класс `CComponent` из версии 1.1 был разделен на два класса: [[yii\base\Object]] и [[yii\base\Component]].
Класс [[yii\base\Object|Object]] является простым базовым классом, который позволяет использовать[геттеры и сеттеры](concept-properties.md) для свойств.
Класс [[yii\base\Component|Component]] наследуется от класса [[yii\base\Object|Object]] и поддерживает [события](concept-events.md) и
[поведения](concept-behaviors.md).
В Yii 2.0 класс `CComponent` из версии 1.1 был разделён на два класса: [[yii\base\Object]] и [[yii\base\Component]].
Класс [[yii\base\Object|Object]] является простым базовым классом, который позволяет использовать
[геттеры и сеттеры](concept-properties.md) для свойств. Класс [[yii\base\Component|Component]] наследуется от
класса [[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 для
выбора данных из основной и связанной таблиц будет использован запрос JOIN. В Yii 2.0 будут выполнены два запроса без использования JOIN:
первый запрос возвращает данные для основной таблицы, а второй - для связанной, с помощью фильтрации по первичным ключами основной таблицы.
Yii 2.0 осуществляет жадную загрузку связи не так, как это было в 1.1. В частности, в версии 1.1 для выбора данных из
основной и связанной таблиц будет использован запрос JOIN. В Yii 2.0 будут выполнены два запроса без использования JOIN:
первый запрос возвращает данные для основной таблицы, а второй, осуществляющий фильтрацию по первичным ключами основной
таблицы — для связанной.
Вместо того, чтобы возвращать объекты [[yii\db\ActiveRecord|ActiveRecord]], вы можете использовать метод [[yii\db\ActiveQuery::asArray()|asArray()]]
при построении запроса, для выборки большого количества записей. Это заставит вернуть результат запроса в качестве массива, что
может существенно снизить время, нужное ЦПУ и память, при большом количестве записей. Например:
Вместо того, чтобы при выборке большого количества записей возвращать объекты [[yii\db\ActiveRecord|ActiveRecord]], вы
можете использовать в построении запроса метод [[yii\db\ActiveQuery::asArray()|asArray()]]. Это заставит вернуть
результат запроса в виде массива, что при большом количестве записей может существенно снизить затрачиваемое процессорное
время и объём потребляемой памяти. Например:
```php
$customers = Customer::find()->asArray()->all();
```
Еще одно изменение связано с тем, что вы больше не можете определять значения по-умолчанию в качестве свойств.
Ещё одно изменение связано с тем, что вы больше не можете определять значения по-умолчанию через public свойства.
Вы должны установить их в методе `init` вашего класса, если это требуется.
```php
...
...
@@ -453,22 +456,54 @@ public function init()
}
```
Также в версии 1.1 были некоторые проблемы с переопределением конструктора ActiveRecord. Данные проблемы не присутствуют
в версии 2.0. Обратите внимание, что при добавлении параметров в конструктор, вам возможно понадобится переопределить метод
[[yii\db\ActiveRecord::instantiate()]]. Переопределение может не потребоваться, если параметры, передаваемые в конструктор будут
иметь значения по-умолчанию, например `null`.
Также в версии 1.1 были некоторые проблемы с переопределением конструктора ActiveRecord. Данные проблемы отсутствуют
в версии 2.0. Обратите внимание, что при добавлении параметров в конструктор, вам, возможно, понадобится переопределить метод
[[yii\db\ActiveRecord::instantiate()]].
Существует также множество других улучшений в 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`.
Вместо этого, вы должны предоставить реализацию интерфейса [[yii\web\IdentityInterface]], что гораздо проще в использовании.
Класс `CWebUser` из версии 1.1 теперь заменён классом [[yii\web\User]]. Также больше не существует класса `CUserIdentity`.
Вы должны реализовать интерфейс [[yii\web\IdentityInterface]], что гораздо проще. Пример реализации представлен в шаблоне
приложения advanced.
Более детальная информация представлена в разделах [Аутентификация](security-authentication.md), [Авторизация](security-authorization.md)
и [Шаблон приложения advanced](tutorial-advanced-app.md).
Более подробная информация представлена в разделах «[Аутентификация](security-authentication.md)»,
«[Авторизация](security-authorization.md)» и «[Шаблон приложения advanced](tutorial-advanced-app.md)».
Разбор и генерация URL
...
...
@@ -476,7 +511,7 @@ public function init()
Работа с URL в Yii 2.0 аналогична той, что была в версии 1.1. Основное изменение заключается в том, что теперь
поддерживаются дополнительные параметры. Например, если у вас имеется правило, объявленное следующим образом, то
оно совпадет с `post/popular` и `post/1/popular`. В версии 1.1, вам пришлось бы использовать два правила, для получения
оно совпадет с `post/popular` и `post/1/popular`. В версии 1.1, вам пришлось бы использовать два правила, для достижения
того же результата.
```php
...
...
@@ -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 вместе с 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)».