. Также вы можете использовать синтаксис, который распознаётся
+PHP-функцией [date()](http://php.net/manual/ru/function.date.php), используя строку с префиксом `php:`.
```php
// ICU форматирование
@@ -114,12 +125,13 @@ echo Yii::$app->formatter->asDate('now', 'yyyy-MM-dd'); // 2014-10-06
echo Yii::$app->formatter->asDate('now', 'php:Y-m-d'); // 2014-10-06
```
-### Временные зоны
+### Часовые пояса
-Для форматирования значений даты и времени Yii будет преобразовывать их в соответствии с [[yii\i18n\Formatter::timeZone|настроенной временной зоной]].
-Поэтому предполагается, что входные значения будут в UTC, если часовой пояс не был указан явно. По этой причине
-рекомендуется хранить все значения даты и времени в формате UTC, предпочтительно в виде UNIX timestamp, которая всегда во временной зоне UTC по определению.
-Если входное значение находится в часовом поясе, отличном от UTC, часовой пояс должен быть указан явно, как в следующем примере:
+Для форматирования значений даты и времени Yii будет преобразовывать их в соответствии с
+[[yii\i18n\Formatter::timeZone|настроенным часовым поясом]]. Поэтому предполагается, что входные значения будут в UTC,
+если часовой пояс не был указан явно. По этой причине рекомендуется хранить все значения даты и времени в формате UTC,
+предпочтительно в виде UNIX timestamp, которая всегда в часовом поясе UTC по определению. Если входное значение
+находится в часовом поясе, отличном от UTC, часовой пояс должен быть указан явно, как в следующем примере:
```php
// при условии Yii::$app->timeZone = 'Europe/Berlin';
@@ -128,13 +140,14 @@ echo Yii::$app->formatter->asTime('2014-10-06 12:41:00'); // 14:41:00
echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00
```
-Начиная с версии 2.0.1 стало возможно настраивать временную зону для предполагаемых timestamp, которые не включают в себя временную зону,
-как во втором примере в коде выше. Вы можете задать [[yii\i18n\Formatter::defaultTimeZone]] временной зоной, которую вы используете для хранения данных.
+Начиная с версии 2.0.1 стало возможно настраивать часовой пояс для предполагаемых timestamp, которые не включают в себя
+часовой пояс, как во втором примере в коде выше. Вы можете задать [[yii\i18n\Formatter::defaultTimeZone]] часовым поясом,
+который вы используете для хранения данных.
-> Примечание: Поскольку временные зоны являются субъектом ответственности правительств по всему миру и могут часто меняться,
-> это значит, что вы, вероятно, не имеете самую свежую информацию в базе данных временных зон, установленной на вашем сервере.
+> Примечание: Поскольку часовые пояса являются субъектом ответственности правительств по всему миру и могут часто меняться,
+> это значит, что вы, вероятно, не имеете самую свежую информацию в базе данных часовых поясов, установленной на вашем сервере.
> Вы можете обратиться к [ICU руководству](http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data)
-> для получения подробностей об обновлении базы данных временных зон.
+> для получения подробностей об обновлении базы данных часовых поясов.
> См. также: [Настройка вашего PHP окружения для интернационализации](tutorial-i18n.md#setup-environment).
@@ -144,13 +157,17 @@ echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00
Для форматирования числовых значений класс форматирования предоставляет следующие методы:
- [[yii\i18n\Formatter::asInteger()|integer]] - значение будет отформатировано как целое число, например `42`.
-- [[yii\i18n\Formatter::asDecimal()|decimal]] - значение будет отформатировано как дробное число, состоящее из целого и дробной части, например: `2,542.123` или `2.542,123`.
+- [[yii\i18n\Formatter::asDecimal()|decimal]] - значение будет отформатировано как дробное число, состоящее из целого и
+ дробной части, например: `2,542.123` или `2.542,123`.
- [[yii\i18n\Formatter::asPercent()|percent]] - значение будет отформатировано как процентное значение, например `42%`.
- [[yii\i18n\Formatter::asScientific()|scientific]] - значение будет отформатировано в научном формате, например: `4.2E4`.
- [[yii\i18n\Formatter::asCurrency()|currency]] - значение будет отформатировано в денежном формате, например: `£420.00`.
- Обратите внимание, чтобы эта функция работала правильно, локаль должна включать в себя часть со страной, например: `en_GB` или` en_US` потому что только язык будет неоднозначным в этом случае.
-- [[yii\i18n\Formatter::asSize()|size]] - значение будет отформатировано как количество байт в человеко понятном формате, например: `410 kibibytes`.
-- [[yii\i18n\Formatter::asShortSize()|shortSize]] - сокращённая версия [[yii\i18n\Formatter::asSize()|size]], например: `410 KiB`.
+ Обратите внимание, чтобы эта функция работала правильно, локаль должна включать в себя часть со страной, например: `en_GB`
+ или` en_US` потому что только язык будет неоднозначным в этом случае.
+- [[yii\i18n\Formatter::asSize()|size]] - значение будет отформатировано как количество байт в человеко понятном формате,
+ например: `410 kibibytes`.
+- [[yii\i18n\Formatter::asShortSize()|shortSize]] - сокращённая версия [[yii\i18n\Formatter::asSize()|size]], например:
+ `410 KiB`.
Форматирование чисел может быть скорректирована с помощью [[yii\i18n\Formatter::decimalSeparator|дробного разделителя]] и
[[yii\i18n\Formatter::thousandSeparator|тысячного разделителя]], которые были заданы в соответствии с локалью.
@@ -158,7 +175,8 @@ echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00
Для более сложной конфигурации, [[yii\i18n\Formatter::numberFormatterOptions]] и [[yii\i18n\Formatter::numberFormatterTextOptions]]
могут быть использованы для настройки внутренне используемого [класса NumberFormatter](http://php.net/manual/ru/class.numberformatter.php)
-Например, чтобы настроить максимальное и минимальное количество знаков после запятой, вы можете настроить свойство [[yii\i18n\Formatter::numberFormatterOptions]] как в примере ниже:
+Например, чтобы настроить максимальное и минимальное количество знаков после запятой, вы можете настроить свойство
+[[yii\i18n\Formatter::numberFormatterOptions]] как в примере ниже:
```php
'numberFormatterOptions' => [
@@ -170,25 +188,31 @@ echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00
Остальное форматирование
----------------
-Кроме форматирование даты, времени и чисел, Yii предоставляет набор других полезных средств форматирования для различных ситуаций:
+Кроме форматирование даты, времени и чисел, Yii предоставляет набор других полезных средств форматирования для различных
+ситуаций:
-- [[yii\i18n\Formatter::asRaw()|raw]] - значением будет отображено как есть, это псевдо-форматирование, которое не имеет никакого эффекта,
+- [[yii\i18n\Formatter::asRaw()|raw]] - значением будет отображено как есть, это псевдо-форматирование, которое не даёт
+ никакого эффекта,
кроме значений `null`, которые будет отформатированы в соответствии с [[nullDisplay]].
- [[yii\i18n\Formatter::asText()|text]] - значением будет экранированный от HTML текст.
Это формат по-умолчанию, используемый в [GridView DataColumn](output-data-widgets.md#data-column).
-- [[yii\i18n\Formatter::asNtext()|ntext]] - значением будет экранированный от HTML текст с новыми строками, сконвертированными в разрывы строк.
-- [[yii\i18n\Formatter::asParagraphs()|paragraphs]] - значением будет экранированный от HTML текст с параграфами, обрамлёнными в `` теги.
-- [[yii\i18n\Formatter::asHtml()|html]] - значение будет очищено, используя [[HtmlPurifier]] с целью предотвратить XSS атаки. Вы можете
- задать дополнительные параметры, такие как `['html', ['Attr.AllowedFrameTargets' => ['_blank']]]`.
+- [[yii\i18n\Formatter::asNtext()|ntext]] - значением будет экранированный от HTML текст с новыми строками,
+ сконвертированными в разрывы строк.
+- [[yii\i18n\Formatter::asParagraphs()|paragraphs]] - значением будет экранированный от HTML текст с параграфами,
+ обрамлёнными в `
` теги.
+- [[yii\i18n\Formatter::asHtml()|html]] - значение будет очищено, используя [[HtmlPurifier]] с целью предотвратить XSS
+ атаки. Вы можете задать дополнительные параметры, такие как `['html', ['Attr.AllowedFrameTargets' => ['_blank']]]`.
- [[yii\i18n\Formatter::asEmail()|email]] - значение будет отформатировано как ссылка `mailto`.
- [[yii\i18n\Formatter::asImage()|image]] - значение будет отформатировано как тег картинки.
- [[yii\i18n\Formatter::asUrl()|url]] - значение будет отформатировано как ссылка .
-- [[yii\i18n\Formatter::asBoolean()|boolean]] - значение форматируется как логическое. По-умолчанию `true` будет отображено как `Yes` и `false` как `No`,
-переведенное на язык приложения. Вы можете настроить это через свойство [[yii\i18n\Formatter::booleanFormat]].
+- [[yii\i18n\Formatter::asBoolean()|boolean]] - значение форматируется как логическое. По-умолчанию `true` будет
+ отображено как `Yes` и `false` как `No`, переведенное на язык приложения. Вы можете настроить это через свойство
+ [[yii\i18n\Formatter::booleanFormat]].
`null` значения
-------------
Для значений `null` в PHP, класс форматирования будет отображать вместо пустой строки маркер, по-умолчанию это
-`(not set)`, переведенный на язык приложения. Вы можете настроить свойство [[yii\i18n\Formatter::nullDisplay|nullDisplay]] для установки собственного маркера.
-Если вы не хотите обрабатывать `null` значения, то установите свойство [[yii\i18n\Formatter::nullDisplay|nullDisplay]] в `null`.
+`(not set)`, переведенный на язык приложения. Вы можете настроить свойство [[yii\i18n\Formatter::nullDisplay|nullDisplay]]
+для установки собственного маркера. Если вы не хотите обрабатывать `null` значения, то установите свойство
+[[yii\i18n\Formatter::nullDisplay|nullDisplay]] в `null`.
diff --git a/docs/guide-ru/rest-authentication.md b/docs/guide-ru/rest-authentication.md
index 84b89b5..8cea67f 100644
--- a/docs/guide-ru/rest-authentication.md
+++ b/docs/guide-ru/rest-authentication.md
@@ -25,7 +25,8 @@ Yii поддерживает все выше перечисленные мето
Чтобы включить аутентификацию для ваших API, выполните следующие шаги:
-1. У компонента приложения `user` установите свойство [[yii\web\User::enableSession|enableSession]] равным false.
+1. У [компонента приложения](structure-application-components.md) `user` установите свойство
+ [[yii\web\User::enableSession|enableSession]] равным false.
2. Укажите, какие методы аутентификации вы планируете использовать, настроив поведение `authenticator`
в ваших классах REST-контроллеров.
3. Реализуйте метод [[yii\web\IdentityInterface::findIdentityByAccessToken()]] в вашем [[yii\web\User::identityClass|классе UserIdentity]].
@@ -36,15 +37,15 @@ Yii поддерживает все выше перечисленные мето
будет выполняться для каждого запроса, что достигается шагами 2 и 3.
> Подсказка: если вы разрабатываете RESTful API в пределах приложения, вы можете настроить свойство
- [[yii\web\User::enableSession|enableSession]] компонента приложения `user` в конфигурации приложения. Если вы
- разрабатываете RESTful API как модуль, можете добавить следующую строчку в метод `init()` модуля:
+> [[yii\web\User::enableSession|enableSession]] компонента приложения `user` в конфигурации приложения. Если вы
+> разрабатываете RESTful API как модуль, можете добавить следующую строчку в метод `init()` модуля:
> ```php
-public function init()
-{
- parent::init();
- \Yii::$app->user->enableSession = false;
-}
-```
+> public function init()
+> {
+> parent::init();
+> \Yii::$app->user->enableSession = false;
+> }
+> ```
Например, для использования HTTP Basic Auth, вы можете настроить свойство `authenticator` следующим образом:
diff --git a/docs/guide-ru/rest-quick-start.md b/docs/guide-ru/rest-quick-start.md
index f979771..72b527b 100644
--- a/docs/guide-ru/rest-quick-start.md
+++ b/docs/guide-ru/rest-quick-start.md
@@ -173,7 +173,7 @@ Content-Type: application/xml
> Информация: Вы наверное заметили, что при обращении к `http://localhost/users` мы получаем информацию с полями,
> которые нежелательно показывать, такими как `password_hash` и `auth_key`. Вы можете и должны отфильтровать их как
-> описано в разделе «[Форматирование ответа](rest-response-formatting.md)».
+> описано в разделе «[Ресурсы](rest-resources.md)».
## Резюме
diff --git a/docs/guide-ru/rest-rate-limiting.md b/docs/guide-ru/rest-rate-limiting.md
index 7c4c900..da06e22 100644
--- a/docs/guide-ru/rest-rate-limiting.md
+++ b/docs/guide-ru/rest-rate-limiting.md
@@ -20,6 +20,28 @@
с данными текущего аутентифицированного пользователя. Для улучшения производительности можно попробовать хранить эту
информацию в кэше или NoSQL хранилище.
+Реализация в модели `User` может быть, например, такой:
+
+```php
+public function getRateLimit($request, $action)
+{
+ return [$this->rateLimit, 1]; // $rateLimit запросов в секунду
+}
+
+public function loadAllowance($request, $action)
+{
+ return [$this->allowance, $this->allowance_updated_at];
+}
+
+public function saveAllowance($request, $action, $allowance, $timestamp)
+{
+ $this->allowance = $allowance;
+ $this->allowance_updated_at = $timestamp;
+ $this->save();
+}
+```
+
+
Как только соответствующий интерфейс будет реализован в классе identity, Yii начнёт автоматически проверять ограничения
частоты запросов при помощи [[yii\filters\RateLimiter]], фильтра действий для [[yii\rest\Controller]]. При превышении
ограничений будет выброшено исключение [[yii\web\TooManyRequestsHttpException]].
diff --git a/docs/guide-ru/rest-routing.md b/docs/guide-ru/rest-routing.md
index 0bf9fac..3fba36d 100644
--- a/docs/guide-ru/rest-routing.md
+++ b/docs/guide-ru/rest-routing.md
@@ -6,8 +6,8 @@
На деле вам обычно хочется включить «красивые» URL-адреса и использовать все преимущества HTTP-методов (HTTP-verbs).
Например, чтобы запрос `POST /users` означал обращение к действию `user/create`.
-Это может быть легко сделано с помощью настройки компонента приложения `urlManager` в
-конфигурации приложения следующим образом:
+Это может быть легко сделано с помощью настройки [компонента приложения](structure-application-components.md)
+`urlManager` в конфигурации приложения следующим образом:
```php
'urlManager' => [
diff --git a/docs/guide-ru/start-databases.md b/docs/guide-ru/start-databases.md
index 6120884..041c424 100644
--- a/docs/guide-ru/start-databases.md
+++ b/docs/guide-ru/start-databases.md
@@ -68,6 +68,14 @@ return [
описывающей то, как экземпляр [приложения](structure-applications.md) должен быть инициализирован.
Для детальной информации, пожалуйста, обратитесь к разделу [Конфигурации](concept-configurations.md).
+Если вам необходимо работать с базами данных, поддержка которых не включена непосредственно в фреймворк, стоит обратить
+внимание на следующие расширения:
+
+- [Informix](https://github.com/edgardmessias/yii2-informix)
+- [IBM DB2](https://github.com/edgardmessias/yii2-ibm-db2)
+- [Firebird](https://github.com/edgardmessias/yii2-firebird)
+
+
Создаём потомка Active Record
-------------------------
diff --git a/docs/guide-ru/start-installation.md b/docs/guide-ru/start-installation.md
index 321bd86..400f927 100644
--- a/docs/guide-ru/start-installation.md
+++ b/docs/guide-ru/start-installation.md
@@ -15,10 +15,10 @@
[getcomposer.org](https://getcomposer.org/download/), или одним из нижеперечисленных способов. На Linux или Mac
используйте следующую команду:
- ```
- curl -sS https://getcomposer.org/installer | php
- mv composer.phar /usr/local/bin/composer
- ```
+```bash
+curl -sS https://getcomposer.org/installer | php
+mv composer.phar /usr/local/bin/composer
+```
На Windows, скачайте и запустите [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe).
@@ -29,8 +29,10 @@
После установки Composer устанавливать Yii можно запустив следующую команду в папке доступной через веб:
- composer global require "fxp/composer-asset-plugin:~1.1.1"
- composer create-project --prefer-dist yiisoft/yii2-app-basic basic
+```bash
+composer global require "fxp/composer-asset-plugin:~1.1.1"
+composer create-project --prefer-dist yiisoft/yii2-app-basic basic
+```
Первая команда устанавливает [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/),
который позволяет управлять зависимостями пакетов bower и npm через Composer. Эту команду достаточно выполнить один раз.
@@ -47,7 +49,9 @@ Composer установит Yii (шаблонное приложение basic)
> Подсказка: Если вы хотите установить последнюю нестабильную ревизию Yii, можете использовать следующую команду,
> в которой присутствует [опция stability](https://getcomposer.org/doc/04-schema.md#minimum-stability):
>
-> composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
+> ```bash
+> composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
+> ```
>
> Старайтесь не использовать нестабильную версию Yii на рабочих серверах потому как она может внезапно поломать код.
@@ -62,10 +66,10 @@ Composer установит Yii (шаблонное приложение basic)
3. В файле `config/web.php` добавьте секретный ключ в значение `cookieValidationKey` (при установке через Composer
это происходит автоматически):
- ```php
- // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
- 'cookieValidationKey' => 'enter your secret key here',
- ```
+```php
+// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
+'cookieValidationKey' => 'enter your secret key here',
+```
Другие опции установки
--------------------------
@@ -100,10 +104,10 @@ http://localhost/basic/web/index.php
* Браузером перейдите по адресу `http://localhost/basic/requirements.php`
* Или выполните команду в консоли:
- ```
- cd basic
- php requirements.php
- ```
+```bash
+cd basic
+php requirements.php
+```
Для корректной работы фреймворка вам необходима установка PHP, соответствующая его минимальным требованиям. Основное
требование — PHP версии 5.4 и выше. Если ваше приложение работает с базой данных, необходимо установить
diff --git a/docs/guide-ru/start-looking-ahead.md b/docs/guide-ru/start-looking-ahead.md
index bd3d7a8..58f15e7 100644
--- a/docs/guide-ru/start-looking-ahead.md
+++ b/docs/guide-ru/start-looking-ahead.md
@@ -4,10 +4,9 @@
В итоге вы создали полноценное приложение на Yii и узнали, как реализовать некоторые
наиболее часто используемые функции, такие, как получение данных от пользователя
при помощи HTML форм, выборки данных из базы данных и их отображения в разбитом на страницы виде.
-Так же вы узнали, как использовать [Gii](tool-gii.md) для автоматической генерации кода, что превращает программирование в настолько простую задачу,
-как простое заполнение какой-либо формы.
-В этом разделе мы обобщим ресурсы о Yii,
-которые помогут вам быть более продуктивным при использовании Yii.
+Так же вы узнали, как использовать [Gii](https://github.com/yiisoft/yii2-gii/blob/master/docs/guide/README.md) для
+автоматической генерации кода, что превращает программирование в настолько простую задачу, как простое заполнение
+какой-либо формы. В этом разделе мы обобщим ресурсы о Yii, которые помогут вам быть более продуктивным при использовании Yii.
* Документация
- Подробное руководство:
diff --git a/docs/guide-ru/start-workflow.md b/docs/guide-ru/start-workflow.md
index 4ee3dd4..50ba678 100644
--- a/docs/guide-ru/start-workflow.md
+++ b/docs/guide-ru/start-workflow.md
@@ -5,6 +5,9 @@
> Информация: далее в данном руководстве предполагается, что Yii установлен в директорию `basic/web`, которая, в свою очередь, установлена как корневой каталог в настройках Web сервера. В результате, обратившись по URL `http://hostname/index.php`, Вы получите доступ к приложению, расположенному в `basic/web`. Детальнее с процессом начальной настройки можно познакомиться в разделе [Установка Yii](start-installation.md).
+Отметим, что в отличие от фреймворка как только приложение установлено, оно становится целиком вашим. Вы можете изменять
+его код как угодно.
+
Функциональность
---------------
@@ -13,11 +16,16 @@
* домашняя страница, отображается при переходе по URL `http://hostname/index.php`
* страница "About" ("О нас")
* на странице "Contact" находится форма обратной связи, на которой пользователь может обратиться к разработчику по e-mail
-* на странице "Login" отображается форма авторизации. Попытайтесь авторизоваться с логином/паролем "admin/admin". Обратите внимание на изменение раздела "Login" в главном меню на "Logout".
+* на странице "Login" отображается форма авторизации. Попытайтесь авторизоваться с логином/паролем "admin/admin".
+ Обратите внимание на изменение раздела "Login" в главном меню на "Logout".
-Эти страницы используют смежный хедер (шапка сайта) и футер (подвал). В "шапке" находится главное меню, при помощи которого пользователь перемещается по сайту. В "подвале" - копирайт и общая информация.
+Эти страницы используют смежный хедер (шапка сайта) и футер (подвал). В "шапке" находится главное меню, при помощи
+которого пользователь перемещается по сайту. В "подвале" - копирайт и общая информация.
-В самой нижней части окна Вы будете видеть системные сообщения Yii - журнал, отладочную информацию, сообщения об ошибках, запросы к базе данных и т.п. Выводом данной информации руководит [встроенный отладчик](tool-debugger.md), он записывает и отображает информацию о ходе выполнения приложения.
+В самой нижней части окна Вы будете видеть системные сообщения Yii - журнал, отладочную информацию, сообщения об ошибках,
+запросы к базе данных и т.п. Выводом данной информации руководит
+[встроенный отладчик](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide/README.md), он записывает и отображает
+информацию о ходе выполнения приложения.
В дополнение к веб приложению имеется консольный скрипт с названием `yii`, который находится в базовой директории приложения.
Этот скрипт может быть использован для выполнения фоновых задач и обслуживания приложения. Всё это описано в разделе
@@ -48,7 +56,7 @@ basic/ корневой каталог приложения
В целом, приложение Yii можно разделить на две категории файлов: расположенные в `basic/web` и расположенные в других директориях. Первая категория доступна через Web (например, браузером), вторая не доступна из вне и не должна быть доступной т.к. содержит служебную информацию.
-В Yii реализована схема проектирования [модель-вид-контроллер (MVC)](http://ru.wikipedia.org/wiki/Model-View-Controller),
+В Yii реализована [архитектурный паттерн MVC](http://ru.wikipedia.org/wiki/Model-View-Controller),
которая соответствует структуре директорий приложения. В директории `models` находятся [Модели](structure-models.md),
в `views` расположены [Виды](structure-views.md), а в каталоге `controllers` все [Контроллеры](structure-controllers.md) приложения.
diff --git a/docs/guide-ru/structure-filters.md b/docs/guide-ru/structure-filters.md
index 04691cb..a538c8e 100644
--- a/docs/guide-ru/structure-filters.md
+++ b/docs/guide-ru/structure-filters.md
@@ -317,11 +317,11 @@ public function behaviors()
### [[yii\filters\Cors|Cors]]
-Совместное использование разными источниками [CORS](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) - это
-механизм, который позволяет использовать различные ресурсы (шрифты, скрипты, и т.д.) с отличных от основного сайта доменов.
-В частности, AJAX вызовы JavaScript могут использовать механизм XMLHttpRequest. В противном случае, такие "междоменные"
-запросы были бы запрещены из-за политики безопасности same origin.
-CORS задаёт способ взаимодействия сервера и браузера, определяющий возможность делать междоменные запросы.
+Совместное использование разными источниками [CORS](https://developer.mozilla.org/ru/docs/Web/HTTP/Access_control_CORS)
+- это механизм, который позволяет использовать различные ресурсы (шрифты, скрипты, и т.д.) с отличных от основного сайта
+доменов. В частности, AJAX вызовы JavaScript могут использовать механизм XMLHttpRequest. В противном случае, такие
+"междоменные" запросы были бы запрещены из-за политики безопасности same origin. CORS задаёт способ взаимодействия
+сервера и браузера, определяющий возможность делать междоменные запросы.
Фильтр [[yii\filters\Cors|Cors filter]] следует определять перед фильтрами Аутентификации / Авторизации, для того чтобы
быть уверенными, что заголовки CORS будут всегда посланы.
diff --git a/docs/guide-ru/structure-modules.md b/docs/guide-ru/structure-modules.md
index a022526..b1bd5fc 100644
--- a/docs/guide-ru/structure-modules.md
+++ b/docs/guide-ru/structure-modules.md
@@ -6,7 +6,9 @@
## Создание модулей
-Модуль помещается в директорию, которая называется [[yii\base\Module::basePath|базовым путем]] модуля. Так же как и в директории приложения, в этой директории существуют поддиректории `controllers`, `models`, `views` и другие, в которых размещаются контроллеры, модели, представления и другие элементы. В следующем примере показано примерное содержимое модуля:
+Модуль помещается в директорию, которая называется [[yii\base\Module::basePath|базовым путем]] модуля. Так же как и в
+директории приложения, в этой директории существуют поддиректории `controllers`, `models`, `views` и другие, в которых
+размещаются контроллеры, модели, представления и другие элементы. В следующем примере показано примерное содержимое модуля:
```
forum/
@@ -23,7 +25,11 @@ forum/
### Классы модулей
-Каждый модуль объявляется с помощью уникального класса, который наследуется от [[yii\base\Module]]. Этот класс должен быть помещен в корне [[yii\base\Module::basePath|базового пути]] модуля и поддерживать [автозагрузку](concept-autoloading.md). Во время доступа к модулю будет создан один экземпляр соответствующего класса модуля. Как и [экземпляры приложения](structure-applications.md), экземпляры модулей нужны, чтобы код модулей мог получить общий доступ к данным и компонентам.
+Каждый модуль объявляется с помощью уникального класса, который наследуется от [[yii\base\Module]]. Этот класс должен
+быть помещен в корне [[yii\base\Module::basePath|базового пути]] модуля и поддерживать [автозагрузку](concept-autoloading.md).
+Во время доступа к модулю будет создан один экземпляр соответствующего класса модуля. Как и
+[экземпляры приложения](structure-applications.md), экземпляры модулей нужны, чтобы код модулей мог получить общий
+доступ к данным и компонентам.
Приведем пример того, как может выглядеть класс модуля:
@@ -42,7 +48,8 @@ class Module extends \yii\base\Module
}
```
-Если метод `init()` стал слишком громоздким из-за кода, который задает свойства модуля, эти свойства можно сохранить в виде [конфигурации](concept-configurations.md), а затем загрузить в методе `init()` следующим образом:
+Если метод `init()` стал слишком громоздким из-за кода, который задает свойства модуля, эти свойства можно сохранить
+в виде [конфигурации](concept-configurations.md), а затем загрузить в методе `init()` следующим образом:
```php
public function init()
@@ -53,7 +60,8 @@ public function init()
}
```
-При этом в конфигурационном файле `config.php` может быть код следующего вида, аналогичный [конфигурации приложения](structure-applications.md#application-configurations):
+При этом в конфигурационном файле `config.php` может быть код следующего вида, аналогичный
+[конфигурации приложения](structure-applications.md#application-configurations):
```php
-При создании контроллеров модуля принято помещать классы контроллеров в подпространство `controllers` пространства имен класса модуля. Это также подразумевает, что файлы классов контроллеров должны располагаться в директории `controllers` [[yii\base\Module::basePath|базового пути]] модуля. Например, чтобы описать контроллер `post` в модуле `forum` из предыдущего примера, класс контроллера объявляется следующим образом:
+При создании контроллеров модуля принято помещать классы контроллеров в подпространство `controllers` пространства
+имён класса модуля. Это также подразумевает, что файлы классов контроллеров должны располагаться в директории `controllers`
+[[yii\base\Module::basePath|базового пути]] модуля. Например, чтобы описать контроллер `post` в модуле `forum` из
+предыдущего примера, класс контроллера объявляется следующим образом:
```php
namespace app\modules\forum\controllers;
@@ -83,19 +94,56 @@ class PostController extends Controller
}
```
-Изменить пространство имен классов контроллеров можно задав свойство [[yii\base\Module::controllerNamespace]]. Если какие-либо контроллеры выпадают из этого пространства имен, доступ к ним можно осуществить, настроив свойство [[yii\base\Module::controllerMap]], аналогично тому, [как это делается в приложении](structure-applications.md#controller-map).
+Изменить пространство имен классов контроллеров можно задав свойство [[yii\base\Module::controllerNamespace]]. Если
+какие-либо контроллеры выпадают из этого пространства имен, доступ к ним можно осуществить, настроив свойство
+[[yii\base\Module::controllerMap]], аналогично тому, [как это делается в приложении](structure-applications.md#controller-map).
### Представления в модулях
-Представления модуля также следует поместить в в поддиректорию `views` [[yii\base\Module::basePath|базового пути]] модуля. Виды, которые рендерит контроллер модуля, должны располагаться в директории `views/ControllerID`, где `ControllerID` соответствует [идентификатору контроллера](structure-controllers.md#routes). Например, если контроллер реализуется классом `PostController`, представления следует разместить в поддиректории `views/post` [[yii\base\Module::basePath|базового пути]] модуля.
+Представления модуля также следует поместить в в поддиректорию `views` [[yii\base\Module::basePath|базового пути]]
+модуля. Виды, которые рендерит контроллер модуля, должны располагаться в директории `views/ControllerID`, где `ControllerID`
+соответствует [идентификатору контроллера](structure-controllers.md#routes). Например, если контроллер реализуется
+классом `PostController`, представления следует разместить в поддиректории `views/post`
+[[yii\base\Module::basePath|базового пути]] модуля.
+
+В модуле можно задать [шаблон](structure-views.md#layouts), который будет использоваться для рендеринга всех представлений
+контроллерами модуля. По умолчанию шаблон помещается в директорию `views/layouts`, а свойство [[yii\base\Module::layout]]
+должно указывать на имя этого шаблона. Если не задать свойство `layout`, модуль будет использовать шаблон, заданный
+в приложении.
+
+### Консольные команды в модулях
+
+Ваш модуль также может объявлять команды, которые будут доступны через [консоль](tutorial-console.md).
+
+Для того, чтобы команда стала доступна, надо изменить свойство [[yii\base\Module::controllerNamespace]] для консольного
+режима так, чтобы оно содержало пространство имён ваших команд.
+
+Этого можно добиться проверяя класс экземпляра приложения Yii в методе `init` модуля:
+
+```php
+public function init()
+{
+ parent::init();
+ if (Yii::$app instanceof \yii\console\Application) {
+ $this->controllerNamespace = 'app\modules\forum\commands';
+ }
+}
+```
+
+Ваши команды будут доступны из командной строки как:
+
+```
+yii //
+```
-В модуле можно задать [шаблон](structure-views.md#layouts), который будет использоваться для рендеринга всех представлений контроллерами модуля. По умолчанию шаблон помещается в директорию `views/layouts`, а свойство [[yii\base\Module::layout]] должно указывать на имя этого шаблона. Если не задать свойство `layout`, модуль будет использовать шаблон, заданный в приложении.
## Использование модулей
-Чтобы задействовать модуль в приложении, достаточно включить его в свойство [[yii\base\Application::modules|modules]] в конфигурации приложения. Следующий код в [конфигурации приложения](structure-applications.md#application-configurations) задействует модуль `forum`:
+Чтобы задействовать модуль в приложении, достаточно включить его в свойство [[yii\base\Application::modules|modules]]
+в конфигурации приложения. Следующий код в [конфигурации приложения](structure-applications.md#application-configurations)
+задействует модуль `forum`:
```php
[
@@ -108,25 +156,40 @@ class PostController extends Controller
]
```
-Свойству [[yii\base\Application::modules|modules]] присваивается массив, содержащий конфигурацию модуля. Каждый ключ массива представляет собой *идентификатор модуля*, который однозначно определяет модуль среди других модулей приложения, а соответствующий массив - это [конфигурация](concept-configurations.md) для создания модуля.
+Свойству [[yii\base\Application::modules|modules]] присваивается массив, содержащий конфигурацию модуля. Каждый ключ массива
+представляет собой *идентификатор модуля*, который однозначно определяет модуль среди других модулей приложения,
+а соответствующий массив - это [конфигурация](concept-configurations.md) для создания модуля.
### Маршруты
-Как маршруты приложения используются для обращения к контроллерам приложения, [маршруты](structure-controllers.md#routes) модуля используются, чтобы обращаться к контроллерам этого модуля. Маршрут контроллера в модуле должен начинаться с идентификатора модуля, за которым следуют идентификатор контроллера и идентификатор действия. Например, если в приложении задействован модуль `forum`, то маршрут `forum/post/index` соответствует действию `index` контроллера `post` этого модуля. Если маршрут состоит только из идентификатора модуля, то контроллер и действие определяются исходя из свойства [[yii\base\Module::defaultRoute]], которое по умолчанию равно `default`. Таким образом, маршрут `forum` соответствует контроллеру `default` модуля `forum`.
+Как маршруты приложения используются для обращения к контроллерам приложения, [маршруты](structure-controllers.md#routes)
+модуля используются, чтобы обращаться к контроллерам этого модуля. Маршрут контроллера в модуле должен начинаться с
+идентификатора модуля, за которым следуют [идентификатор контроллера](structure-controllers.md#controller-ids) и
+[идентификатор действия](structure-controllers.md#action-ids). Например, если в приложении задействован модуль `forum`,
+то маршрут `forum/post/index` соответствует действию `index` контроллера `post` этого модуля. Если маршрут состоит только
+из идентификатора модуля, то контроллер и действие определяются исходя из свойства [[yii\base\Module::defaultRoute]],
+которое по умолчанию равно `default`. Таким образом, маршрут `forum` соответствует контроллеру `default` модуля `forum`.
### Получение доступа к модулям
-Зачастую внутри модуля может потребоваться доступ к экземпляру [класса модуля](#module-classes), через который получаются идентификатор модуля, его параметры, компоненты, и т. п. Это можно сделать с помощью следующей конструкции:
+Зачастую внутри модуля может потребоваться доступ к экземпляру [класса модуля](#module-classes), через который получаются
+идентификатор модуля, его параметры, компоненты, и т. п. Это можно сделать с помощью следующей конструкции:
```php
$module = MyModuleClass::getInstance();
```
-где `MyModuleClass` соответствует имени класса модуля, доступ к которому нужно получить. Метод `getInstance()` возвращает запрошенный в данный момент экземпляр класса модуля. Если модуль не запрошен, метод вернет null. Учтите, что обычно экземпляры класса модуля вручную не создаются, так как созданный вручную экземпляр будет отличаться от экземпляра, созданного Yii в качестве ответа на запрос.
+где `MyModuleClass` соответствует имени класса модуля, доступ к которому нужно получить. Метод `getInstance()` возвращает
+запрошенный в данный момент экземпляр класса модуля. Если модуль не запрошен, метод вернет null. Учтите, что обычно
+экземпляры класса модуля вручную не создаются, так как созданный вручную экземпляр будет отличаться от экземпляра,
+созданного Yii в качестве ответа на запрос.
-> Информация: При разработке модуля нельзя исходить из предположения, что модулю будет назначен конкретный идентификатор. Это связано с тем, что идентификатор, назначаемый модулю при использовании в приложении или в другом модуле, может быть выбран совершенно произвольно. Чтобы получить идентификатор модуля, нужно вначале выбрать экземпляр модуля, как это описано выше, а затем получить доступ к идентификатору через свойство `$module->id`.
+> Информация: При разработке модуля нельзя исходить из предположения, что модулю будет назначен конкретный идентификатор.
+Это связано с тем, что идентификатор, назначаемый модулю при использовании в приложении или в другом модуле, может быть
+выбран совершенно произвольно. Чтобы получить идентификатор модуля, нужно вначале выбрать экземпляр модуля, как это
+описано выше, а затем получить доступ к идентификатору через свойство `$module->id`.
Доступ к экземпляру модуля можно получить следующими способами:
@@ -138,7 +201,8 @@ $module = \Yii::$app->getModule('forum');
$module = \Yii::$app->controller->module;
```
-Первый подход годится только если известен идентификатор модуля, а второй подход наиболее полезен, если известно, какой контроллер запрошен.
+Первый подход годится только если известен идентификатор модуля, а второй подход наиболее полезен, если известно,
+какой контроллер запрошен.
Имея экземпляр модуля можно получить доступ к параметрам и компонентам, зарегистрированным в модуле. Например,
@@ -149,7 +213,9 @@ $maxPostCount = $module->params['maxPostCount'];
### Предзагрузка модулей
-Может потребоваться запускать некоторые модули при каждом запросе. Модуль [[yii\debug\Module|debug]] - один из таких модулей. Для этого список идентификаторов таких модулей необходимо указать в свойстве [[yii\base\Application::bootstrap|bootstrap]] приложения.
+Может потребоваться запускать некоторые модули при каждом запросе. Модуль [[yii\debug\Module|debug]] - один из таких
+модулей. Для этого список идентификаторов таких модулей необходимо указать в свойстве
+[[yii\base\Application::bootstrap|bootstrap]] приложения.
Например, следующая конфигурация приложения обеспечивает загрузку модуля `debug` при каждом запросе:
@@ -168,7 +234,9 @@ $maxPostCount = $module->params['maxPostCount'];
## Вложенные модули
-Модули могут вкладываться друг в друга без ограничений по глубине. Иными словами, в модуле содержится модуль, в который входит еще один модуль, и т. д. Первый модуль называется *родительским*, остальные - *дочерними*. Дочерние модули объявляются в свойстве [[yii\base\Module::modules|modules]] родительских модулей. Например,
+Модули могут вкладываться друг в друга без ограничений по глубине. Иными словами, в модуле содержится модуль, в который
+входит еще один модуль, и т. д. Первый модуль называется *родительским*, остальные - *дочерними*. Дочерние модули
+объявляются в свойстве [[yii\base\Module::modules|modules]] родительских модулей. Например,
```php
namespace app\modules\forum;
@@ -189,13 +257,21 @@ class Module extends \yii\base\Module
}
```
-Маршрут к контроллеру вложенного модуля должен содержать идентификаторы всех его предков. Например, маршрут `forum/admin/dashboard/index` соответствует действию `index` контроллера `dashboard` модуля `admin`, который в свою очередь является дочерним модулем модуля `forum`.
+Маршрут к контроллеру вложенного модуля должен содержать идентификаторы всех его предков. Например, маршрут
+`forum/admin/dashboard/index` соответствует действию `index` контроллера `dashboard` модуля `admin`, который в свою
+очередь является дочерним модулем модуля `forum`.
-> Информация: Метод [[yii\base\Module::getModule()|getModule()]] возвращает только те дочерние модули, которые принадлежат родительскому модулю непосредственно. В свойстве [[yii\base\Application::loadedModules]] содержится список загруженных модулей, в том числе прямых и косвенных потомков, с индексированием по имени класса.
+> Информация: Метод [[yii\base\Module::getModule()|getModule()]] возвращает только те дочерние модули, которые
+принадлежат родительскому модулю непосредственно. В свойстве [[yii\base\Application::loadedModules]] содержится
+список загруженных модулей, в том числе прямых и косвенных потомков, с индексированием по имени класса.
## Лучшие практики
-Модули лучше всего подходят для крупных приложений, функционал которых можно разделить на несколько групп, в каждой из которых функции тесно связаны между собой. Каждая группа функций может разрабатываться в виде модуля, над которым работает один разработчик или одна команда.
+Модули лучше всего подходят для крупных приложений, функционал которых можно разделить на несколько групп, в каждой из
+которых функции тесно связаны между собой. Каждая группа функций может разрабатываться в виде модуля, над которым работает
+один разработчик или одна команда.
-Модули - это хороший способ повторно использовать код на уровне групп функций. В виде модулей можно реализовать такой функционал как управление пользователями или управление комментариями, а затем использовать эти модули в будущих разработках.
+Модули - это хороший способ повторно использовать код на уровне групп функций. В виде модулей можно реализовать такая
+функциональность как управление пользователями или управление комментариями, а затем использовать эти модули в будущих
+разработках.
diff --git a/docs/guide-ru/structure-widgets.md b/docs/guide-ru/structure-widgets.md
index 6fbd769..e1e76d8 100644
--- a/docs/guide-ru/structure-widgets.md
+++ b/docs/guide-ru/structure-widgets.md
@@ -71,6 +71,15 @@ use yii\helpers\Html;
рендеринга, метод [[yii\base\Widget::begin()]] возвращает экземпляр виджета, который может быть
использован в дальнейшем для формирования его внутреннего содержимого.
+### Задание глобальных умолчаний
+
+Глобальные умолчания для определённого типа виджета могут быть заданы через DI контейнер:
+
+```php
+\Yii::$container->set('yii\widgets\LinkPager', ['maxButtonCount' => 5]);
+```
+
+Подробнее это описано в [подразделе «Практическое использование» раздела «Контейнер внедрения зависимостей»](concept-di-container.md#practical-usage).
## Создание Виджетов
diff --git a/docs/guide-ru/tutorial-console.md b/docs/guide-ru/tutorial-console.md
index 5bc0450..0da7727 100644
--- a/docs/guide-ru/tutorial-console.md
+++ b/docs/guide-ru/tutorial-console.md
@@ -27,6 +27,7 @@
Больше об этой команде вы можете узнать в [I18N Section](tutorial-i18n.md#message-command).
- [[yii\console\controllers\MigrateController|MigrateController]] - Управление миграциями приложения.
Миграции базы данных более детально описаны в [Database Migration Section](db-migrations.md).
+- [[yii\console\controllers\ServeController|ServeController]] - позволяет запускать встроенный вебсервер PHP.
Использование
@@ -184,8 +185,8 @@ public function actionIndex()
Есть несколько предопределённых констант, которые вы можете использовать:
-- `Controller::EXIT_CODE_NORMAL` со значением `0`;
-- `Controller::EXIT_CODE_ERROR` со значением `1`.
+- [[yii\console\Controller::EXIT_CODE_NORMAL|Controller::EXIT_CODE_NORMAL]] со значением `0`;
+- [[yii\console\Controller::EXIT_CODE_ERROR|Controller::EXIT_CODE_ERROR]] со значением `1`.
Хорошая практика, определять значимые для вашего контроллера константы в случае, если вы используете больше типов ошибок.
@@ -200,7 +201,8 @@ public function actionIndex()
$this->stdout("Hello?\n", Console::BOLD);
```
-Если вам нужно собрать строку динамически объединяя несколько стилей, лучше использовать `ansiFormat`:
+Если вам нужно собрать строку динамически объединяя несколько стилей, лучше использовать
+[[yii\helpers\Console::ansiFormat()|ansiFormat()]]:
```php
$name = $this->ansiFormat('Alex', Console::FG_YELLOW);