Browse Source

Merge pull request #8480 from vyachin/fix-some-guide-ru

fix guide rus doc [skip ci]
tags/2.0.6
Alexander Makarov 9 years ago
parent
commit
e3735d31e9
  1. 12
      docs/guide-ru/caching-data.md
  2. 2
      docs/guide-ru/concept-autoloading.md
  3. 2
      docs/guide-ru/concept-di-container.md
  4. 6
      docs/guide-ru/concept-events.md
  5. 2
      docs/guide-ru/concept-properties.md
  6. 2
      docs/guide-ru/concept-service-locator.md
  7. 6
      docs/guide-ru/db-dao.md
  8. 14
      docs/guide-ru/db-migrations.md
  9. 6
      docs/guide-ru/helper-url.md
  10. 4
      docs/guide-ru/input-forms.md
  11. 26
      docs/guide-ru/input-validation.md
  12. 10
      docs/guide-ru/output-formatting.md
  13. 2
      docs/guide-ru/output-sorting.md
  14. 74
      docs/guide-ru/output-theming.md
  15. 4
      docs/guide-ru/rest-error-handling.md
  16. 2
      docs/guide-ru/rest-quick-start.md
  17. 4
      docs/guide-ru/rest-resources.md
  18. 2
      docs/guide-ru/rest-response-formatting.md
  19. 6
      docs/guide-ru/runtime-handling-errors.md
  20. 20
      docs/guide-ru/runtime-sessions-cookies.md
  21. 18
      docs/guide-ru/security-authentication.md
  22. 22
      docs/guide-ru/security-authorization.md
  23. 6
      docs/guide-ru/security-best-practices.md
  24. 8
      docs/guide-ru/security-passwords.md
  25. 2
      docs/guide-ru/start-databases.md
  26. 2
      docs/guide-ru/start-gii.md
  27. 0
      docs/guide-ru/structure-application-components.md
  28. 4
      docs/guide-ru/structure-applications.md
  29. 8
      docs/guide-ru/structure-assets.md
  30. 2
      docs/guide-ru/structure-controllers.md

12
docs/guide-ru/caching-data.md

@ -129,7 +129,7 @@ Yii поддерживает множество хранилищ кэша:
[[yii\caching\Cache::mget()|mget()]] и [[yii\caching\Cache::madd()|madd()]]. В случае, если хранилище не поддерживает
эту функцию, она будет имитироваться.
Так как [[yii\caching\Cache]] реализует `ArrayAccess`, компонент кэша можно испльзовать как массив:
Так как [[yii\caching\Cache]] реализует `ArrayAccess`, компонент кэша можно использовать как массив:
```php
$cache['var1'] = $value1; // эквивалентно: $cache->set('var1', $value1);
@ -210,7 +210,7 @@ if ($data === false) {
// Создать зависимость от времени модификации файла example.txt.
$dependency = new \yii\caching\FileDependency(['fileName' => 'example.txt']);
// Данные устаревеют через 30 секунд.
// Данные устаревают через 30 секунд.
// Данные могут устареть и раньше, если example.txt будет изменён.
$cache->set($key, $data, 30, $dependency);
@ -232,7 +232,7 @@ $data = $cache->get($key);
## Кэширование запросов <span id="query-caching"></span>
Кэширование запросов - это специальная функция кэширования, построеная на основе кэширования данных.
Кэширование запросов - это специальная функция кэширования, построенная на основе кэширования данных.
Она предназначена для кэширования результатов запросов к базе данных.
Кэширование запросов требует [[yii\db\Connection|DB connection]] и приложения действительный `cache`. Простое использование
@ -248,7 +248,7 @@ $result = $db->cache(function ($db) {
});
```
Кэширование запросов может быть использованно как для [DAO](db-dao.md), так и для [ActiveRecord](db-active-record.md):
Кэширование запросов может быть использовано как для [DAO](db-dao.md), так и для [ActiveRecord](db-active-record.md):
```php
$result = Customer::getDb()->cache(function ($db) {
@ -318,7 +318,7 @@ $result = $db->cache(function ($db) {
```
Если вы просто хотите использовать кэширование для одного запроса, вы можете вызвать [[yii\db\Command::cache()]] при
построении конманды. Например:
построении команды. Например:
```php
// использовать кэширование запросов и установить срок действия кэша на 60 секунд
@ -348,4 +348,4 @@ $result = $db->cache(function ($db) {
типа столбца `BLOB` в некоторых СУБД, в качестве результата запроса будет выведен ресурс обработчик данных столбца.
Некоторые кэш хранилища имеют ограничение в размере данных. Например, Memcache ограничивает максимальный размер каждой
записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закэшированны.
записи до 1 Мб. Таким образом, если результат запроса превышает этот предел, данные не будут закешированы.

2
docs/guide-ru/concept-autoloading.md

@ -30,7 +30,7 @@ $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
При использовании [шаблона приложения basic](start-installation.md) вы можете хранить свои классы в пространстве имён `app`.
В этом случае они будут загружаться автоматически без создания нового псевдонима. Это работает потому как `@app`
является [заранее определённым псевдонимом](concept-aliases.md#predefined-aliases) и такое имя класса как
`app\components\MyClass` в соответствии с описанным выше алготимом преобразуется в путь
`app\components\MyClass` в соответствии с описанным выше алгоритмом преобразуется в путь
`директорияПриложения/components/MyClass.php`.
В [шаблоне приложения advanced](tutorial-advanced-app.md) каждый уровень приложения обладает собственным корневым

2
docs/guide-ru/concept-di-container.md

@ -121,7 +121,7 @@ $foo = $container->get('Foo');
------------------------
Вы можете использовать [[yii\di\Container::set()]] для регистрации зависимостей. При регистрации требуется имя зависимости, а так же определение зависимости.
Именем зависимости может быть имя класса, интерфейса или алиас, так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP calback'ом.
Именем зависимости может быть имя класса, интерфейса или алиас, так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP callback'ом.
```php
$container = new \yii\di\Container;

6
docs/guide-ru/concept-events.md

@ -226,9 +226,9 @@ Event::off(Foo::className(), Foo::EVENT_HELLO);
Глобальные события <span id="global-events"></span>
-------------
Yii поддерживает так называемые *глобальные события*, которые на самом деле основаны на нестандартном использовании описанного выше механизма событий. Для глобальных событий нужен глобально доступный объект-синглетон, например, экземпляр приложения - [application](structure-applications.md).
Yii поддерживает так называемые *глобальные события*, которые на самом деле основаны на нестандартном использовании описанного выше механизма событий. Для глобальных событий нужен глобально доступный объект-синглтон, например, экземпляр приложения - [application](structure-applications.md).
Чтобы создать глобальное событие, отправитель сообщения вызывает метод `trigger()` синглетона, а не свой собственный метод `trigger()`. Аналогичным образом обработчики события также присоединяются к событиям синглетона. Например:
Чтобы создать глобальное событие, отправитель сообщения вызывает метод `trigger()` синглтона, а не свой собственный метод `trigger()`. Аналогичным образом обработчики события также присоединяются к событиям синглтона. Например:
```php
use Yii;
@ -242,6 +242,6 @@ Yii::$app->on('bar', function ($event) {
Yii::$app->trigger('bar', new Event(['sender' => new Foo]));
```
Преимущество глобальных событий в том, что им не нужен объект, к событию которого бы присоединялся обработчик и объект, с помощью котрого бы это событие инициировалось. Вместо этого и для присоединения обработчика, и для инициирования события используется синглетон (например, экземпляр приложения).
Преимущество глобальных событий в том, что им не нужен объект, к событию которого бы присоединялся обработчик и объект, с помощью которого бы это событие инициировалось. Вместо этого и для присоединения обработчика, и для инициирования события используется синглтон (например, экземпляр приложения).
Тем не менее, так как пространство имен глобальных событий едино для всего приложения, их имена нельзя назначать бездумно. Например, полезными могут быть искусственные пространства имен ("frontend.mail.sent", "backend.mail.sent").

2
docs/guide-ru/concept-properties.md

@ -75,7 +75,7 @@ $object->label = 'abc';
значение свойства `label`. А метод `setLabel()` не будет вызван.
* Свойства, объявленные таким образом, не поддерживают модификаторы видимости. Это значит, что объявление геттера или
сеттера как public, protected или private никак не скажется на области видимости свойства.
* Свойства могут быть объявлены только с помощью *нестатичных* геттеров и/или сеттеров. Статичные методы не будут
* Свойства могут быть объявлены только с помощью *не статичных* геттеров и/или сеттеров. Статичные методы не будут
обрабатываться подобным образом.
Возвращаясь к проблеме необходимости вызова функции `trim()` во всех местах, где присваивается значение свойству `label`,

2
docs/guide-ru/concept-service-locator.md

@ -84,7 +84,7 @@ return [
];
```
Есть алтернативный приведённому выше способ настройки компонента "search". Вмето анонимной функции, котрая
Есть альтернативный приведённому выше способ настройки компонента "search". Вместо анонимной функции, которая
отдаёт экземпляр `SolrService` можно использовать статический метод, возвращающий такую анонимную функцию:
```php

6
docs/guide-ru/db-dao.md

@ -378,9 +378,9 @@ $transaction = $db->beginTransaction($isolationLevel);
Yii предоставляет четыре константы для наиболее распространённых уровней изоляции:
- [[\yii\db\Transaction::READ_UNCOMMITTED]] - низший уровень, «Грязное» чтение, неповторяющееся чтение и фантомное чтение.
- [[\yii\db\Transaction::READ_UNCOMMITTED]] - низший уровень, «Грязное» чтение, не повторяющееся чтение и фантомное чтение.
- [[\yii\db\Transaction::READ_COMMITTED]] - предотвращает «Грязное» чтение.
- [[\yii\db\Transaction::REPEATABLE_READ]] - предотвращает «Грязное» чтение и неповторяющееся чтение.
- [[\yii\db\Transaction::REPEATABLE_READ]] - предотвращает «Грязное» чтение и не повторяющееся чтение.
- [[\yii\db\Transaction::SERIALIZABLE]] - высший уровень, предотвращает все вышеуказанные проблемы.
Помимо использования приведённых выше констант для задания уровня изоляции, вы можете также использовать строки с
@ -496,7 +496,7 @@ $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
Вы можете получить текущий статус соединения к подчинённому серверу через `$db->slave`.
Компонент `Connection` поддерживает балансировку нагрузки и переключение при сбое для подчинённых серверов.
При выполнении первого запроса на чтение, компонент `Connection` будет рандомным образом выбирать подчинённый сервер
При выполнении первого запроса на чтение, компонент `Connection` будет случайным образом выбирать подчинённый сервер
и попытается подключиться к нему. Если сервер окажется "мёртвым", он попробует подключиться к другому. Если ни один
из подчинённых серверов не будет доступен, он подключится к мастеру. Если настроить
[[yii\db\Connection::serverStatusCache|кеш статуса серверов]], то недоступность серверов может быть запомнена, чтоб не

14
docs/guide-ru/db-migrations.md

@ -5,7 +5,7 @@
В связи с тем, что изменение структуры базы данных часто требует изменение исходного кода, yii поддерживает так
называемую возможность *миграции баз данных*, которая позволяет отслеживать изменения в базах данных при помощи терминов *миграции баз данных*, которые являются системой контроля версий вместе с исходным кодом.
Следующие шаги показывают, как миграции базы данных могут быть использованны командой разработчиков в процессе разработки:
Следующие шаги показывают, как миграции базы данных могут быть использованы командой разработчиков в процессе разработки:
1. Илья создает новую миграцию (например, создается новая таблица или изменяется определение столбца и т.п.).
2. Илья фиксирует новую миграцию в системе управления версиями (например, в Git, Mercurial).
@ -42,7 +42,7 @@ yii migrate/create <name>
yii migrate/create create_news_table
```
> Примечание: Поскольку аргумент `name` будет использован как часть имени класса создавамой миграции, он должен содержать только буквы, цифры и/или символы подчеркивания.
> Примечание: Поскольку аргумент `name` будет использован как часть имени класса создаваемой миграции, он должен содержать только буквы, цифры и/или символы подчеркивания.
Приведенная выше команда создаст новый PHP класс с именем файла `m150101_185401_create_news_table.php` в директории `@app/migrations`. Файл содержит следующий код, который главным образом декларирует класс миграции `m150101_185401_create_news_table` с следующим каркасом кода:
@ -99,7 +99,7 @@ class m150101_185401_create_news_table extends \yii\db\Migration
}
```
> Для справки: Не все миграции являются обратимыми. Например, если метод `up()` удаляет строку из таблицы, возможно что у вас уже не будет возможности вернуть эту строку методом `down()`. Иногда Вам может быть просто слишком лень реализовывать метод `down()`, в связи с тем, что это не очень распространенно - откатывать миграции базы данных. В этом случае вы должны в методе `down()` вернуть `false`, чтобы указать, что миграция не является обратимой.
> Для справки: Не все миграции являются обратимыми. Например, если метод `up()` удаляет строку из таблицы, возможно что у вас уже не будет возможности вернуть эту строку методом `down()`. Иногда Вам может быть просто слишком лень реализовывать метод `down()`, в связи с тем, что это не очень распространено - откатывать миграции базы данных. В этом случае вы должны в методе `down()` вернуть `false`, чтобы указать, что миграция не является обратимой.
Базовый класс миграций [[yii\db\Migration]] предоставляет подключение к базе данных через свойство [[yii\db\Migration::db|db]]. Вы можете использовать его для манипулирования схемой базы данных используя методы описанные в [работе со схемой базы данных](db-dao.md#database-schema).
@ -224,7 +224,7 @@ yii migrate/to 1392853618 # используя врем
Чтобы отменить (откатить) одну или несколько миграций, которые применялись ранее, нужно запустить следующую команду:
```
yii migrate/down # отменяет самую последнюю применёную миграцию
yii migrate/down # отменяет самую последнюю применённую миграцию
yii migrate/down 3 # отменяет 3 последних применённых миграции
```
@ -292,11 +292,11 @@ yii migrate/mark 1392853618 # используя вре
Например, если мы хотим перенести модуль `forum`, чьи файлы миграций расположены в каталоге `migrations` данного модуля, для этого мы можем использовать следующую команду:
```
# неинтерактивная миграция модуля форума
# не интерактивная миграция модуля форума
yii migrate --migrationPath=@app/modules/forum/migrations --interactive=0
```
### Глобальная Настройка Комманд <span id="configuring-command-globally"></span>
### Глобальная Настройка Команд <span id="configuring-command-globally"></span>
Вместо того, чтобы каждый раз вводить одинаковые значения параметров миграции, когда вы запускаете команду миграции, можно настроить её раз и навсегда в конфигурации приложения, как показано ниже:
@ -311,7 +311,7 @@ return [
];
```
С приведённой выше конфигурацией, каждый раз при запуске команды миграции, таблица `backend_migration` будет использованна для записи истории миграций. И Вам больше не нужно указывать её через параметр `migrationTable` в командной строке.
С приведённой выше конфигурацией, каждый раз при запуске команды миграции, таблица `backend_migration` будет использована для записи истории миграций. И Вам больше не нужно указывать её через параметр `migrationTable` в командной строке.
## Миграции в Несколько Баз Данных <span id="migrating-multiple-databases"></span>

6
docs/guide-ru/helper-url.md

@ -63,7 +63,7 @@ $url = Url::toRoute(['product/view', 'id' => 42]);
и будет определен с помощью [[\yii\base\Module::uniqueId|uniqueId]].
Начиная с версии 2.0.2, вы можете задавать роуты с помощью [псевдонимов](concept-aliases.md). В этом случае, сначала
псевдоним будет сконвертирован в соответсвующий роут, который будет преобразован в абсолютный в соответсвии с вышеописанными
псевдоним будет сконвертирован в соответствующий роут, который будет преобразован в абсолютный в соответствии с вышеописанными
правилами.
Примеры использования метода:
@ -92,9 +92,9 @@ echo Url::toRoute('site/index', 'https');
- массивом: будет вызван [[toRoute()]], чтобы сгенерировать URL. Например: `['site/index']`, `['post/index', 'page' => 2]`.
В разделе [[toRoute()]] подробно описано как задавать роут;
- Строка, начинающася с `@`, будет обработана как псевдоним. Будет возвращено соответствующее значение псевдонима;
- Строка, начинающаяся с `@`, будет обработана как псевдоним. Будет возвращено соответствующее значение псевдонима;
- Пустая строка: вернет текущий URL;
- Обычная строка: вернет строку без имзенений
- Обычная строка: вернет строку без изменений
Когда у метода задан второй параметр `$scheme` (строка или true), то сгенерированный URL будет с протоколом
(полученным из [[\yii\web\UrlManager::hostInfo]]). Если в `$url` указан протокол, то его значение будет заменено.

4
docs/guide-ru/input-forms.md

@ -1,7 +1,7 @@
Создание форм
==============
Основной способ использования форм в Yii является использоваение [[yii\widgets\ActiveForm]]. Этот подход должен быть
Основной способ использования форм в Yii является использование [[yii\widgets\ActiveForm]]. Этот подход должен быть
применён, когда форма основана на модели. Кроме того, имеются дополнительные методы в [[yii\helpers\Html]], которые
используются для добавления кнопок и текстовых подсказок к любой форме.
@ -61,7 +61,7 @@ $form = ActiveForm::begin([
CSS класс и идентификатор ID будет прикреплён к открывающемуся тегу `<form>`. Для просмотра всех доступных настроек,
пожалуйста обратитесь к API документации [[yii\widgets\ActiveForm]].
Для создания в форме элемента с меткой и любой применимой Javascript валадиацией, вызывается [[yii\widgets\ActiveForm::field()|ActiveForm::field()]],
Для создания в форме элемента с меткой и любой применимой Javascript валидацией, вызывается [[yii\widgets\ActiveForm::field()|ActiveForm::field()]],
который возвращает экземпляр [[yii\widgets\ActiveField]]. Когда этот метод вызывается непосредственно, то результатом
будет текстовый элемент (`input type="text"`). Для того, чтобы настроить элемент, можно вызвать одни за одним дополнительные
методы [[yii\widgets\ActiveField|ActiveField]]:

26
docs/guide-ru/input-validation.md

@ -8,13 +8,13 @@
```php
$model = new \app\models\ContactForm;
// модель заполненая пользовательскими данными
// модель заполненная пользовательскими данными
$model->attributes = \Yii::$app->request->post('ContactForm');
if ($model->validate()) {
// все данные корректны
} else {
// данные не корректны: $errors - массив содержащий сообщения об ощибках
// данные не корректны: $errors - массив содержащий сообщения об ошибках
$errors = $model->errors;
}
```
@ -53,7 +53,7 @@ public function rules()
// необязательный, указывает, в каком случае(ях) это правило должно применяться
// если не указан, это означает, что правило применяется ко всем сценариям
// Вы также можете настроить "except" этот вариан применяет правило ко всем
// Вы также можете настроить "except" этот вариант применяет правило ко всем
// сценариям кроме перечисленных
'on' => ['scenario1', 'scenario2', ...],
@ -67,7 +67,7 @@ public function rules()
* Псевдонимы основного валидатора, например `required`, `in`, `date` и другие. Пожалуйста, обратитесь к списку
[Основных валидаторов](tutorial-core-validators.md) за более подробной информацией.
* Название метода проверки в моделе класса, или анонимную функцию. Пожалуйста, обратитесь к разделу
* Название метода проверки в модели класса, или анонимную функцию. Пожалуйста, обратитесь к разделу
[Встроенных валидаторов](#inline-validators) за более подробной информацией.
* Полное имя класса валидатора. Пожалуйста, обратитесь к разделу [Автономных валидаторов](#standalone-validators)
за более подробной информацией.
@ -85,7 +85,7 @@ public function rules()
3. Каждое активное правило проверяет каждый активный атрибут, который ассоциируется с правилом.
Правила проверки выполняются в том порядке, как они перечислены.
Согластно вышеизложеным пунктам, атрибут будет проверяться, если и только если он является
Согласно вышеизложенным пунктам, атрибут будет проверяться, если и только если он является
активным атрибутом, объявленных в `scenarios()` и связан с одним или несколькими активными правилами,
объявленными в `rules()`.
@ -135,7 +135,7 @@ public function rules()
]
```
Это свойство `[[yii\validators\Validator::when|when]]` принимает PHP callable функциию с следующим описанием:
Это свойство `[[yii\validators\Validator::when|when]]` принимает PHP callable функцию с следующим описанием:
```php
/**
@ -163,7 +163,7 @@ function ($model, $attribute)
### Фильтрация данных <span id="data-filtering"></span>
Пользователь частво вводит данные которые нужно предварительно отфильтровать или предварительно обработать(очистить).
Пользователь часто вводит данные которые нужно предварительно отфильтровать или предварительно обработать(очистить).
Например, вы хотите обрезать пробелы вокруг `username`. Вы можете использовать правила валидации для
достижения этой цели.
@ -392,7 +392,7 @@ class CountryValidator extends Validator
реализуются путем вызова `validateValue()`.
## Валидация на строне клиента <span id="client-side-validation"></span>
## Валидация на стороне клиента <span id="client-side-validation"></span>
Проверка на стороне клиента на основе JavaScript целесообразна, когда конечные пользователи вводят
входные данные через HTML-формы, так как эта проверка позволяет пользователям узнать, ошибки ввода
@ -463,7 +463,7 @@ HTML-форма построена с помощью следующего код
Класс `[[yii\widgets\ActiveForm]]` будет читать правила проверки заявленные в модели и генерировать
соответствующий код JavaScript для валидаторов, которые поддерживают проверку на стороне клиента.
Когда пользователь изменяет значение поля ввода или отправляет форму, JavaScript на стороне клиента
будет срабатывать и проверять введеные данные.
будет срабатывать и проверять введенные данные.
Если вы хотите отключить проверку на стороне клиента полностью, вы можете настроить свойство
`[[yii\widgets\ActiveForm::enableClientValidation]]` установив значение false. Вы также можете отключить
@ -551,10 +551,10 @@ JS;
}
```
В примере выше переменная `deferred` предусмотреная Yii, которая является массивом Отложенных объектов.
В примере выше переменная `deferred` предусмотренная Yii, которая является массивом Отложенных объектов.
`$.get()` метод jQuery создает Отложенный объект, который помещается в массив `deferred`.
Также можно явно создать Отложенный объект и вызвать его методом `resolve()`, тогда выполнется асинхронный
Также можно явно создать Отложенный объект и вызвать его методом `resolve()`, тогда выполняется асинхронный
вызов к серверу. В следующем примере показано, как проверить размеры загружаемого файла изображения
на стороне клиента.
@ -630,7 +630,7 @@ JS;
Вы можете также включить AJAX валидацию или выключать для отдельных полей ввода, настроив их
с помощью свойства `[[yii\widgets\ActiveField::enableAjaxValidation]]`.
Также необходимо подготовить сервер для обрабаботки AJAX-запросов валидации. Это может быть достигнуто
Также необходимо подготовить сервер для обработки AJAX-запросов валидации. Это может быть достигнуто
с помощью следующего фрагмента кода, в контроллере действий:
```php
@ -645,4 +645,4 @@ if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
случае их появления в формате JSON.
> Информация: Вы также можете использовать [Deferred Validation](#deferred-validation) AJAX валидации.
Однако, AJAX-функция проверки, описанные здесь более интегрированая и требует меньше усилий к написанию кода.
Однако, AJAX-функция проверки, описанные здесь более интегрированная и требует меньше усилий к написанию кода.

10
docs/guide-ru/output-formatting.md

@ -19,7 +19,7 @@ Formatter может быть использован двумя различны
```
2. Используя метод [[yii\i18n\Formatter::format()|format()]] и имя формата.
Этот метод также используется в виджетах наподобии [[yii\grid\GridView]] и [[yii\widgets\DetailView]], в которых вы можете
Этот метод также используется в виджетах на подобии [[yii\grid\GridView]] и [[yii\widgets\DetailView]], в которых вы можете
задать формат отображения данных в колонке через конфигурацию виджета.
```php
@ -42,7 +42,7 @@ Formatter может быть использован двумя различны
Yii::$app->formatter->locale = 'en-US';
echo Yii::$app->formatter->asDate('2014-01-01'); // выведет: January 1, 2014
Yii::$app->formatter->locale = 'de-DE';
echo Yii::$app->formatter->asDate('2014-01-01'); // выведет: 1. Januar 2014
echo Yii::$app->formatter->asDate('2014-01-01'); // выведет: 1. January 2014
Yii::$app->formatter->locale = 'ru-RU';
echo Yii::$app->formatter->asDate('2014-01-01'); // выведет: 1 января 2014 г.
```
@ -102,7 +102,7 @@ echo Yii::$app->formatter->asDate('2014-01-01'); // выведет: 1 январ
- `full` будет отображать `Monday, 6 October 2014` и `15:58:42 GMT` соответственно.
Дополнительно вы можете задать специальный формат, используя синтаксис, заданный [ICU Project](http://site.icu-project.org/),
который описан в руководстве ICU по следущему адресу:
который описан в руководстве ICU по следующему адресу:
<http://userguide.icu-project.org/formatparse/datetime>. Также вы можете использовать синтаксис, который распознаётся PHP-функций
[date()](http://php.net/manual/ru/function.date.php), используя строку с префиксом `php:`.
@ -115,7 +115,7 @@ echo Yii::$app->formatter->asDate('now', 'php:Y-m-d'); // 2014-10-06
### Временные зоны <span id="time-zones"></span>
Для форматирования значений даты и времении Yii будет преобразовывать их в соответствии с [[yii\i18n\Formatter::timeZone|настроенной временной зоной]].
Для форматирования значений даты и времени Yii будет преобразовывать их в соответствии с [[yii\i18n\Formatter::timeZone|настроенной временной зоной]].
Поэтому предполагается, что входные значения будут в UTC, если часовой пояс не был указан явно. По этой причине
рекомендуется хранить все значения даты и времени в формате UTC, предпочтительно в виде UNIX timestamp, которая всегда во временной зоне UTC по определению.
Если входное значение находится в часовом поясе, отличном от UTC, часовой пояс должен быть указан явно, как в следующем примере:
@ -175,7 +175,7 @@ echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00
кроме значений `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::asNtext()|ntext]] - значением будет экранированный от HTML текст с новыми строками, сконвертированными в разрывы строк.
- [[yii\i18n\Formatter::asParagraphs()|paragraphs]] - значением будет экранированный от HTML текст с параграфами, обрамлёнными в `<p>` теги.
- [[yii\i18n\Formatter::asHtml()|html]] - значение будет очищено, используя [[HtmlPurifier]] с целью предотвратить XSS атаки. Вы можете
задать дополнительные параметры, такие как `['html', ['Attr.AllowedFrameTargets' => ['_blank']]]`.

2
docs/guide-ru/output-sorting.md

@ -50,7 +50,7 @@ foreach ($models as $model) {
В примере выше, мы объявляем два атрибута, которые поддерживают сортировку: `name` and `age`.
Мы передаем информацию о сортировке в запрос статьи, поэтому результаты запроса будут отсортированы
согласно сортировке, установленной в объекте Sort. В представлении, мы отображаем две ссылки,
которые ведут на страницы с данными, отсортированными по соответствующим аттрибутам.
которые ведут на страницы с данными, отсортированными по соответствующим атрибутам.
Класс [[yii\data\Sort|Sort]] будет автоматически принимать параметры, переданные с запросом
и в соответствии с ними настраивать параметры сортировки. Вы можете регулировать список принимаемых

74
docs/guide-ru/output-theming.md

@ -1,21 +1,21 @@
Темизация
Темизация
=========
Темизация — это способ заменить один набор [представлений](structure-views.md) другим без переписываения кода, что
замечательно подходит для изменения внешнего вида приложения.
Темизация — это способ заменить один набор [представлений](structure-views.md) другим без переписывания кода, что
замечательно подходит для изменения внешнего вида приложения.
Для того, чтобы начать использовать темизацию, настройте свойство [[yii\base\View::theme|theme]] компонениа
приложения `view`. Конфигурация настраивает объект [[yii\base\Theme]], который отвечает за то, как как именно
заменяются файлы отображений. Главным образом, стоит настроить следующие свойства [[yii\base\Theme]]:
Для того, чтобы начать использовать темизацию, настройте свойство [[yii\base\View::theme|theme]] компонента
приложения `view`. Конфигурация настраивает объект [[yii\base\Theme]], который отвечает за то, как как именно
заменяются файлы отображений. Главным образом, стоит настроить следующие свойства [[yii\base\Theme]]:
- [[yii\base\Theme::basePath]]: базовая директория, в которой размещены темизированные ресурсы (CSS, JS, изображения,
и так далее).
- [[yii\base\Theme::baseUrl]]: базовый URL для доступа к темизированым ресурсам.
- [[yii\base\Theme::pathMap]]: правила замены файлов представлений. Подробно описаны далее.
- [[yii\base\Theme::basePath]]: базовая директория, в которой размещены темизированные ресурсы (CSS, JS, изображения,
и так далее).
- [[yii\base\Theme::baseUrl]]: базовый URL для доступа к темизированным ресурсам.
- [[yii\base\Theme::pathMap]]: правила замены файлов представлений. Подробно описаны далее.
Например, если вы вызываете `$this->render('about')` в `SiteController`, то будет использоваться файл отображения
`@app/views/site/about.php`. Тем не менее, если вы включите темизацию как показано ниже, то вместо него будет
использоваться `@app/themes/basic/site/about.php`.
Например, если вы вызываете `$this->render('about')` в `SiteController`, то будет использоваться файл отображения
`@app/views/site/about.php`. Тем не менее, если вы включите темизацию как показано ниже, то вместо него будет
использоваться `@app/themes/basic/site/about.php`.
```php
return [
@ -33,11 +33,11 @@ return [
];
```
> Информация: При настройке тем поддерживаются псевдонимы пути. При замене отображений они преобразуются в реальные
пути в файловой системе или URL.
> Информация: При настройке тем поддерживаются псевдонимы пути. При замене отображений они преобразуются в реальные
пути в файловой системе или URL.
Вы можете обратиться к объекту [[yii\base\Theme]] через свойство [[yii\base\View::theme]]. Например,
в файле отображения, это будет выгляедеть следующим образом (объект view доступен как `$this`):
Вы можете обратиться к объекту [[yii\base\Theme]] через свойство [[yii\base\View::theme]]. Например,
в файле отображения, это будет выглядеть следующим образом (объект view доступен как `$this`):
```php
$theme = $this->theme;
@ -49,17 +49,17 @@ $url = $theme->getUrl('img/logo.gif');
$file = $theme->getPath('img/logo.gif');
```
Свойство [[yii\base\Theme::pathMap]] определяет то, как заменяются файлы представлений. Свойство принимает массив пар
ключ-значение где ключи являются путями к оригинальным файлам, которые мы хотим заменить, а значения — соответствующими
путями к файлам из темы. Замена основана на частичном совпадении: если путь к представлению начинаеися с любого из ключей
массива [[yii\base\Theme::pathMap|pathMap]], то соответствующая ему часть будет заменена значением из того же массива.
Для приведённой выше конфигурпции `@app/views/site/about.php` частично совпадает с ключём `@app/views` и будет
заменён на `@app/themes/basic/site/about.php`.
Свойство [[yii\base\Theme::pathMap]] определяет то, как заменяются файлы представлений. Свойство принимает массив пар
ключ-значение где ключи являются путями к оригинальным файлам, которые мы хотим заменить, а значения — соответствующими
путями к файлам из темы. Замена основана на частичном совпадении: если путь к представлению начинается с любого из ключей
массива [[yii\base\Theme::pathMap|pathMap]], то соответствующая ему часть будет заменена значением из того же массива.
Для приведённой выше конфигурации `@app/views/site/about.php` частично совпадает с ключом `@app/views` и будет
заменён на `@app/themes/basic/site/about.php`.
## Темизация модулей <span id="theming-modules"></span>
## Темизация модулей <span id="theming-modules"></span>
Для того, чтобы темизировать модули, свойство [[yii\base\Theme::pathMap]] может быть настроено следующим образом:
Для того, чтобы темизировать модули, свойство [[yii\base\Theme::pathMap]] может быть настроено следующим образом:
```php
'pathMap' => [
@ -68,12 +68,12 @@ $file = $theme->getPath('img/logo.gif');
],
```
Это позволит вам темизировать `@app/modules/blog/views/comment/index.php` в `@app/themes/basic/modules/blog/views/comment/index.php`.
Это позволит вам темизировать `@app/modules/blog/views/comment/index.php` в `@app/themes/basic/modules/blog/views/comment/index.php`.
## Темизация виджетов <span id="theming-widgets"></span>
## Темизация виджетов <span id="theming-widgets"></span>
Для того, чтобы темизировать виджеты вы можете настроить свойство [[yii\base\Theme::pathMap]] следующим образом:
Для того, чтобы темизировать виджеты вы можете настроить свойство [[yii\base\Theme::pathMap]] следующим образом:
```php
'pathMap' => [
@ -82,14 +82,14 @@ $file = $theme->getPath('img/logo.gif');
],
```
Это позволит вам темизировать `@app/widgets/currency/views/index.php` в `@app/themes/basic/widgets/currency/index.php`.
Это позволит вам темизировать `@app/widgets/currency/views/index.php` в `@app/themes/basic/widgets/currency/index.php`.
## Наследование тем <span id="theme-inheritance"></span>
## Наследование тем <span id="theme-inheritance"></span>
Иногда требуется создать базовую тему, задающую общий вид приложения и далее изменять этот вид в зависимости, например,
от сегодняшнего праздника. Добиться этого можно при помощи наследования тем. При этом один путь к файлу ставится в
соответствие нескольким путям из темы:
Иногда требуется создать базовую тему, задающую общий вид приложения и далее изменять этот вид в зависимости, например,
от сегодняшнего праздника. Добиться этого можно при помощи наследования тем. При этом один путь к файлу ставится в
соответствие нескольким путям из темы:
```php
'pathMap' => [
@ -100,7 +100,7 @@ $file = $theme->getPath('img/logo.gif');
]
```
В этом случае представление `@app/views/site/about.php` темизируется либо в `@app/themes/christmas/site/index.php`,
либо в `@app/themes/basic/site/index.php` в зависимости от того, в какой из тем есть нужный файл. Если файлы присутствуют
и там и там, используется первый из них. На практике большинство темизированных файлов будут расположены
в `@app/themes/basic`, а их версии для праздников в `@app/themes/christmas`.
В этом случае представление `@app/views/site/about.php` темизируется либо в `@app/themes/christmas/site/index.php`,
либо в `@app/themes/basic/site/index.php` в зависимости от того, в какой из тем есть нужный файл. Если файлы присутствуют
и там и там, используется первый из них. На практике большинство темизированных файлов будут расположены
в `@app/themes/basic`, а их версии для праздников в `@app/themes/christmas`.

4
docs/guide-ru/rest-error-handling.md

@ -37,7 +37,7 @@ Content-Type: application/json; charset=UTF-8
* `403`: Аутентифицированному пользователю не разрешен доступ к указанной точке входа API.
* `404`: Запрошенный ресурс не существует.
* `405`: Метод не поддерживается. Сверьтесь со списком поддерживаемых HTTP-методов в заголовке `Allow`.
* `415`: Неподдерживаемый тип данных. Запрашивается неправильный тип данных или номер версии.
* `415`: Не поддерживаемый тип данных. Запрашивается неправильный тип данных или номер версии.
* `422`: Проверка данных завершилась неудачно (в ответе на `POST`-запрос, например). Подробные сообщения об ошибках смотрите в теле ответа.
* `429`: Слишком много запросов. Запрос отклонен из-за превышения ограничения частоты запросов.
* `500`: Внутренняя ошибка сервера. Возможная причина — ошибки в самой программе.
@ -45,7 +45,7 @@ Content-Type: application/json; charset=UTF-8
## Свой формат ответа с ошибкой <span id="customizing-error-response"></span>
Вам может понадобиться изменить формат ответа с ошибкой. Например, вместо использования разных статусов ответа HTTP
для разных ошибок, вы можете всегда отавать статус 200, а реальный код статуса отдавать как часть JSON ответа:
для разных ошибок, вы можете всегда отдавать статус 200, а реальный код статуса отдавать как часть JSON ответа:
```
HTTP/1.1 200 OK

2
docs/guide-ru/rest-quick-start.md

@ -62,7 +62,7 @@ URL и логичные глаголы HTTP.
## Пробуем <span id="trying-it-out"></span>
Вот так просто мы и создали RESTful API для доступа к данным пользователя. Api нашего сервиса, сейчас включает в себя:
Вот так просто мы и создали RESTful API для доступа к данным пользователя. API нашего сервиса, сейчас включает в себя:
* `GET /users`: получение постранично списка всех пользователей;
* `HEAD /users`: получение метаданных листинга пользователей;

4
docs/guide-ru/rest-resources.md

@ -19,8 +19,8 @@ RESTful API строятся вокруг доступа к *ресурсам*
## Поля <span id="fields"></span>
Когда ресурс включается в ответ RESTful API, необходимо сеарилизовать его в строку. Yii разбивает этот процесс на два этапа.
Сначала ресурс конвертируется в массив при помощи [[yii\rest\Serializer]]. На втором этапе массив сеарилизуется в строку
Когда ресурс включается в ответ RESTful API, необходимо серилеазовать его в строку. Yii разбивает этот процесс на два этапа.
Сначала ресурс конвертируется в массив при помощи [[yii\rest\Serializer]]. На втором этапе массив сериализуется в строку
заданного формата (например, JSON или XML) при помощи [[yii\web\ResponseFormatterInterface|форматтера ответа]].
Именно на этом стоит сосредоточится при разработке класса ресурса.

2
docs/guide-ru/rest-response-formatting.md

@ -8,7 +8,7 @@
2. Конвертирует объекты ресурсов в массивы, как описано в секции [Ресурсы](rest-resources.md).
Этим занимается [[yii\rest\Serializer]].
3. Конвертирует массивы в строки исходя из формата, определенного на этапе согласование содержимого. Это задача для
[[yii\web\ResponseFormatterInterface|форматера ответов]], регистрируемого с помощью компонента приложения
[[yii\web\ResponseFormatterInterface|форматтера ответов]], регистрируемого с помощью компонента приложения
[[yii\web\Response::formatters|response]].

6
docs/guide-ru/runtime-handling-errors.md

@ -4,7 +4,7 @@
В состав Yii входит встроенный [[yii\web\ErrorHandler|обработчик ошибок]], делающий работу с ошибками гораздо более
приятным занятием. А именно:
* Все нефатальные ошибки PHP (то есть warning, notice) конвертируются в исключения, которые можно перехватывать.
* Все не фатальные ошибки PHP (то есть warning, notice) конвертируются в исключения, которые можно перехватывать.
* Исключения и фатальные ошибки PHP отображаются в режиме отладки с детальным стеком вызовов и исходным кодом.
* Можно использовать для отображения ошибок [действие контроллера](structure-controllers.md#actions).
* Поддерживаются различные форматы ответа.
@ -30,7 +30,7 @@ return [
С приведённой выше конфигурацией на странице ошибки будет отображаться до 20 строк исходного кода.
Как уже было упомянуто, обработчик ошибок конвертирует все нефатальные ошибки PHP в перехватываемые исключения.
Как уже было упомянуто, обработчик ошибок конвертирует все не фатальные ошибки PHP в перехватываемые исключения.
Это означает что можно поступать с ошибками следующим образом:
```php
@ -57,7 +57,7 @@ use yii\web\NotFoundHttpException;
throw new NotFoundHttpException();
```
## Настройка отобажения ошибок <span id="customizing-error-display"></span>
## Настройка отображения ошибок <span id="customizing-error-display"></span>
[[yii\web\ErrorHandler|Обработчик ошибок]] меняет отображение ошибок в зависимости от значения константы `YII_DEBUG`.
При `YII_DEBUG` равной true (режим отладки), обработчик ошибок будет отображать для облегчения отладки детальный стек

20
docs/guide-ru/runtime-sessions-cookies.md

@ -16,7 +16,7 @@
```php
$session = Yii::$app->session;
// проверям что сессия уже открыта
// проверяем что сессия уже открыта
if ($session->isActive) ...
// открываем сессию
@ -64,7 +64,7 @@ foreach ($session as $name => $value) ...
foreach ($_SESSION as $name => $value) ...
```
> Информация: При получении данных из сессии через компонент `session`, сессия будет автоматически открыта, если она не была открыта до этого. В этом заключатеся отличие от получения данных из глобальной переменной `$_SESSION`, которое требует обязательного вызова `session_start()`.
> Информация: При получении данных из сессии через компонент `session`, сессия будет автоматически открыта, если она не была открыта до этого. В этом заключается отличие от получения данных из глобальной переменной `$_SESSION`, которое требует обязательного вызова `session_start()`.
При работе с сессионными данными, являющимися массивами, компонент `session` имеет ограничение, запрещающее прямую модификацию отдельных элементов массива. Например,
@ -114,11 +114,11 @@ $session['captcha.lifetime'] = 3600;
Для улучшения производительности и читаемости кода рекомендуется использовать последний прием. Другими словами, вместо того, чтобы хранить массив как одну переменную сессии, мы сохраняем каждый элемент массива как обычную сессионную переменную с общим префиксом.
### Пользовательское хранилице для сессии <span id="custom-session-storage"></span>
### Пользовательское хранилище для сессии <span id="custom-session-storage"></span>
По умолчанию класс [[yii\web\Session]] сохраняет данные сессии в виде файлов на сервере. Однако Yii предоставляет ряд классов, которые реализуют различные способы хранения данных сессии:
* [[yii\web\DbSession]]: сохраненяет данные сессии в базе данных.
* [[yii\web\DbSession]]: сохраняет данные сессии в базе данных.
* [[yii\web\CacheSession]]: хранение данных сессии в предварительно сконфигурированном компоненте кэша [кэш](caching-data.md#cache-components).
* [[yii\redis\Session]]: хранение данных сессии в [redis](http://redis.io/).
* [[yii\mongodb\Session]]: хранение сессии в [MongoDB](http://www.mongodb.org/).
@ -152,7 +152,7 @@ CREATE TABLE session
)
```
где 'BLOB' соответствует типу данных предопчитаемой вами DBMS. Ниже приведены примеры соответствия типов BLOB в наиболее популярных DBMS:
где 'BLOB' соответствует типу данных предпочитаемой вами DBMS. Ниже приведены примеры соответствия типов BLOB в наиболее популярных DBMS:
- MySQL: LONGBLOB
- PostgreSQL: BYTEA
@ -163,7 +163,7 @@ CREATE TABLE session
### Flash-сообщения <span id="flash-data"></span>
Flash-сообщения - это особый тип данных в сессии, которые устанавливаются один раз во время запроса и доступны только на протяжении следующего запроса, затем они автоматически удаляются. Такой способ хранения информации в сессии наиболее часто используется для реализации сообщений, которые будует отображены конечному пользователю один раз, например подтверждение об успешной отправке формы.
Flash-сообщения - это особый тип данных в сессии, которые устанавливаются один раз во время запроса и доступны только на протяжении следующего запроса, затем они автоматически удаляются. Такой способ хранения информации в сессии наиболее часто используется для реализации сообщений, которые будут отображены конечному пользователю один раз, например подтверждение об успешной отправке формы.
Установить и получить flash-сообщения можно через компонент приложения `session`. Например:
@ -194,7 +194,7 @@ $session = Yii::$app->session;
// Запрос #1
// добавить новое flash-сообщение с названием "alerts"
$session->addFlash('alerts', 'Вы успешно удалии пост.');
$session->addFlash('alerts', 'Вы успешно удалили пост.');
$session->addFlash('alerts', 'Вы успешно добавили нового друга.');
$session->addFlash('alerts', 'Благодарим.');
@ -261,13 +261,13 @@ unset($cookies['language']);
Кроме свойств [[yii\web\Cookie::name|name]] и [[yii\web\Cookie::value|value]], класс [[yii\web\Cookie]] также предоставляет ряд свойств для получения информации о куках: [[yii\web\Cookie::domain|domain]], [[yii\web\Cookie::expire|expire]]. Эти свойства можно сконфигурировать и затем добавить куку в коллекцию для HTTP-ответа.
> Замечение: Для большей безопасности значение свойства [[yii\web\Cookie::httpOnly]] по умолчанию установлено в true. Это уменьшает риски доступа к защищенной куке на клиентской стороне (если браузер поддерживает такую возможность). Вы можете обратиться к [httpOnly wiki](https://www.owasp.org/index.php/HttpOnly) для дополнительной информации.
> Замечание: Для большей безопасности значение свойства [[yii\web\Cookie::httpOnly]] по умолчанию установлено в true. Это уменьшает риски доступа к защищенной куке на клиентской стороне (если браузер поддерживает такую возможность). Вы можете обратиться к [httpOnly wiki](https://www.owasp.org/index.php/HttpOnly) для дополнительной информации.
### Валидация кук <span id="cookie-validation"></span>
Во время записи и чтения кук через компоненты `request` и `response`, как будет показано в двух последующих подразделах, фреймворк предоставляет автоматическую валидацию, которая обеспечивает защиту кук от модификации на стороне клиента. Это достигается за счет подписи каждой куки секретным ключом, позволяющим приложению распознать куку, которая была модифицирована на клиентской стороне. В таком случае кука НЕ БУДЕТ доступна через свойство [[yii\web\Request::cookies|cookie collection]] компонента `request`.
> Замечение: Валидация кук защищает только от их модификации. Если валидация не была пройдена, получить доступ к кукам все еще можно через глобальную переменную `$_COOKIE`. Это связано с тем, что дополнительные пакеты и библиотеки могут манипулировать куками без вызова валидации, которую обеспечивает Yii.
> Замечание: Валидация кук защищает только от их модификации. Если валидация не была пройдена, получить доступ к кукам все еще можно через глобальную переменную `$_COOKIE`. Это связано с тем, что дополнительные пакеты и библиотеки могут манипулировать куками без вызова валидации, которую обеспечивает Yii.
По-умолчанию валидация кук включена. Её можно отключить, установив свойство [[yii\web\Request::enableCookieValidation]]
в false, однако мы настоятельно не рекомендуем это делать.
@ -286,5 +286,5 @@ return [
];
```
> Замечение: Свойство [[yii\web\Request::cookieValidationKey|cookieValidationKey]] является секретным значением и должно быть известно только людям, которым вы доверяете. Не помещайте эту информацию под систему контроля версий.
> Замечание: Свойство [[yii\web\Request::cookieValidationKey|cookieValidationKey]] является секретным значением и должно быть известно только людям, которым вы доверяете. Не помещайте эту информацию под систему контроля версий.

18
docs/guide-ru/security-authentication.md

@ -3,13 +3,13 @@
Аутентификация - это процесс проверки подлинности пользователя. Обычно используется идентификатор
(например `username` или адрес электронной почты) и секретный токен (например пароль или ключ доступа), чтобы судить о
том что пользователь именно тот за кого себя выдаёт. Аутентификация является основной функуцией формы входа.
том что пользователь именно тот за кого себя выдаёт. Аутентификация является основной функцией формы входа.
Yii обеспечивает фреймворк авторизации с различнымы компонентами, обеспечивающими процесс входа.
Yii обеспечивает фреймворк авторизации с различными компонентами, обеспечивающими процесс входа.
Для использования этого фреймворка, вам нужно проделать следующее:
* Настроить компонент приложения [[yii\web\User|user]];
* Создать класс реализующии интерфейс [[yii\web\IdentityInterface]].
* Создать класс реализующими интерфейс [[yii\web\IdentityInterface]].
## Настройка [[yii\web\User]] <span id="configuring-user"></span>
@ -42,7 +42,7 @@ return [
по одному секретному токену (например в RESTful приложениях, не сохраняющих состояние между запросами).
* [[yii\web\IdentityInterface::getId()|getId()]]: Этот метод возвращает ID пользователя, представленного данным экземпляром `identity`.
* [[yii\web\IdentityInterface::getAuthKey()|getAuthKey()]]: Этот метод возвращает ключ, используемый для основанной на `cookie` аутентификации.
Ключ сохраняется в аутентификационной cookie и позже сравниватеся с версией находящейся на сервере,
Ключ сохраняется в аутентификационной cookie и позже сравнивается с версией находящейся на сервере,
чтобы удостоверится что аутентификационная `cookie` верная.
* [[yii\web\IdentityInterface::validateAuthKey()|validateAuthKey()]]: Этот метод реализует логику проверки ключа
для основанной на `cookie` аутентификации.
@ -117,7 +117,7 @@ class User extends ActiveRecord implements IdentityInterface
}
```
Как обьяснялось ранее, вам нужно реализовать только `getAuthKey()` и `validateAuthKey()`, если ваше приложение использует
Как объяснялось ранее, вам нужно реализовать только `getAuthKey()` и `validateAuthKey()`, если ваше приложение использует
только аутентификацию основанную на `cookie`. В этом случае, вы можете использовать следующий код для генерации
ключа аутентификации для каждого пользователя и хранения его в таблице `user`:
@ -126,9 +126,9 @@ class User extends ActiveRecord implements IdentityInterface
{
......
public function beforeSave($insert)
public function beforeSend($insert)
{
if (parent::beforeSave($insert)) {
if (parent::beforeSend($insert)) {
if ($this->isNewRecord) {
$this->auth_key = \Yii::$app->security->generateRandomString();
}
@ -200,7 +200,7 @@ Yii::$app->user->logout();
Класс [[yii\web\User]] вызывает несколько событий во время процессов входа и выхода.
* [[yii\web\User::EVENT_BEFORE_LOGIN|EVENT_BEFORE_LOGIN]]: вызвается перед вызовом [[yii\web\User::login()]].
* [[yii\web\User::EVENT_BEFORE_LOGIN|EVENT_BEFORE_LOGIN]]: вызывается перед вызовом [[yii\web\User::login()]].
Если обработчик устанавливает свойство [[yii\web\UserEvent::isValid|isValid]] объекта в `false`,
процесс входа будет прерван.
* [[yii\web\User::EVENT_AFTER_LOGIN|EVENT_AFTER_LOGIN]]: вызывается после успешного входа.
@ -209,6 +209,6 @@ Yii::$app->user->logout();
процесс выхода будет прерван.
* [[yii\web\User::EVENT_AFTER_LOGOUT|EVENT_AFTER_LOGOUT]]: вызывается после успешного выхода.
Вы можете использовать эти события для реазлизации функции аудита входа, статистике онлайн пользователей. Для примера,
Вы можете использовать эти события для реализации функции аудита входа, статистике онлайн пользователей. Для примера,
в обработчике для [[yii\web\User::EVENT_AFTER_LOGIN|EVENT_AFTER_LOGIN]], вы можете сделать запись о времени и IP
адресе входа в таблицу `user`.

22
docs/guide-ru/security-authorization.md

@ -4,7 +4,7 @@
> Примечание: этот раздел находится на стадии разработки.
Авторизация это процесс проверки того, что пользователь имеет достаточно прав чтобы что-то сделать. Yii обеспечивает два
методв авторизации: Фильтры контроля доступа (ACF) и контроль доступа основанный на ролях (RBAC).
метода авторизации: Фильтры контроля доступа (ACF) и контроль доступа основанный на ролях (RBAC).
Фильтры контроля доступа
@ -47,7 +47,7 @@ class SiteController extends Controller
}
```
Код выше показывет ACF связанный с контроллером `site` через поведение. Это типичный способ использования фильтров действий.
Код выше показывает ACF связанный с контроллером `site` через поведение. Это типичный способ использования фильтров действий.
Параметр `only` указывает, что фильтр ACF нужно применять только к действиям `login`, `logout` и `signup`.
Параметр `rules` задаёт [[yii\filters\AccessRule|правила доступа]], которые означают следующее:
@ -58,7 +58,7 @@ class SiteController extends Controller
Когда ACF проводит проверку авторизации, он проверяет правила по одному сверху вниз пока не найдёт совпадение.
Значение опции `allow` выбранного правила указывает авторизовывать пользователя или нет. Если ни одно из правил
не совпало, то пользователь считается НЕ авторизованным и ACF останавливает дальнейшее выполнение деиствия.
не совпало, то пользователь считается НЕ авторизованным и ACF останавливает дальнейшее выполнение действия.
По умолчанию, ACF, когда у пользователя отсутствует доступ к текущему действию, делает следующее:
@ -112,7 +112,7 @@ class SiteController extends Controller
* [[yii\filters\AccessRule::denyCallback|denyCallback]]: задаёт PHP колбек, который будет вызван если доступ будет
запрещён при вызове этого правила.
Ниже покзан пример, показывающий использование опции `matchCallback`, которая позволяет писать произвольную
Ниже показан пример, показывающий использование опции `matchCallback`, которая позволяет писать произвольную
логику проверки доступа:
```php
@ -139,7 +139,7 @@ class SiteController extends Controller
];
}
// Колбек сработал! Эта страница может быть отображена толко 31-ого октября
// Колбек сработал! Эта страница может быть отображена только 31-ого октября
public function actionSpecialCallback()
{
return $this->render('happy-halloween');
@ -151,7 +151,7 @@ class SiteController extends Controller
Контроль доступа на основе ролей (RBAC)
---------------------------------------
Управление доступом на основе ролей (RBAC) обеспечивает простой, но мощьный централизованный контроль доступа.
Управление доступом на основе ролей (RBAC) обеспечивает простой, но мощный централизованный контроль доступа.
Пожалуйста обратитесь к [Wikipedia](https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%BC_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_%D1%80%D0%BE%D0%BB%D0%B5%D0%B9)
для получения более подробного сравнения RBAC с другими, более традиционными, системами контроля доступа.
@ -242,7 +242,7 @@ return [
### Создание данных авторизации
Для создания данных авторизации нужно выполнить следущие задачи:
Для создания данных авторизации нужно выполнить следующие задачи:
- определение ролей и разрешений;
- установка отношений между ролями и правами доступа;
@ -306,7 +306,7 @@ class RbacController extends Controller
Автор может создавать пост, администратор может обновлять пост и делать всё, что может делать автор.
Если ваше приложение позволяет регистрировать пользователей, то вам необходимо сразу назначать роли этим новым пользователям.
Например, для того, чтобы все вошедшие пользователи могли стать авторами в расширеном шаблоне проекта, вы должны изменить
Например, для того, чтобы все вошедшие пользователи могли стать авторами в расширенном шаблоне проекта, вы должны изменить
`frontend\models\SignupForm::signup()` как показано ниже:
```php
@ -340,7 +340,7 @@ public function signup()
### Использование правил
Как упомянуто выше, правила добавляют дополнительные ограничения на роли и разрешения. Правила это классы, расширяющие
[[yii\rbac\Rule]]. Они должны реализовывать метод [[yii\rbac\Rule::execute()|execute()]]. В иерархии, созданой нами ранее,
[[yii\rbac\Rule]]. Они должны реализовывать метод [[yii\rbac\Rule::execute()|execute()]]. В иерархии, созданной нами ранее,
автор не можете редактировать свой пост. Давайте исправим это. Во-первых, мы должны создать правило проверяющее,
что пользователь является автором поста:
@ -358,7 +358,7 @@ class AuthorRule extends Rule
/**
* @param string|integer $user the user ID.
* @param Item $item the role or permission that this rule is associated with
* @param Item $item the role or permission that this rule is associated width
* @param array $params parameters passed to ManagerInterface::checkAccess().
* @return boolean a value indicating whether the rule permits the role or permission it is associated with.
*/
@ -513,7 +513,7 @@ return [
];
```
Теперь, если вы выполните проверку доступа, для обойх ролей `admin` и `author` будет выполнена проверка правила
Теперь, если вы выполните проверку доступа, для обоих ролей `admin` и `author` будет выполнена проверка правила
асоциированного с ними. Если правило вернёт истину, это будет означать что роль применяется к текущему пользователю.
На основании правила, реализованного выше, если пользователь входит в группу 1 пользователю будет назначена роль `admin`;
и если значение `group` равно 2 будет применена роль `author`.

6
docs/guide-ru/security-best-practices.md

@ -39,7 +39,7 @@ HTML вы должны экранировать `<`, `>` и похожие сп
Как избежать SQL-иньекций
-------------------------
SQL-иньекции происходят, когда текст запроса формируется склеиванием неэкранированных строк, как показано ниже:
SQL-иньекции происходят, когда текст запроса формируется склеиванием не экранированных строк, как показано ниже:
```php
$username = $_GET['username'];
@ -108,14 +108,14 @@ $rowCount = $connection->createCommand($sql)->queryScalar();
Как избежать XSS
----------------
XSS или крос-сайтинговый скриптинг становится возможен, когда не экранированный выходной HTML попадает в браузер.
XSS или кросс-сайтинговый скриптинг становится возможен, когда не экранированный выходной HTML попадает в браузер.
Например, если пользователь должен ввести свой имя, но вместо `Alexander` он вводит `<script>alert('Hello!');</script>`, то
все страницы, которые его выводят без экранирования, будут выполнять JavaScript `alert('Hello!');`, и в результате
будет выводится окно сообщения в браузере. В зависимости от сайта, вместо невинных скриптов с выводом всплывающего
hello, злоумышленниками могут быть отправлены скрипты, похищающие личные данные пользователей сайта,
либо выполняющие операции от их имени.
В Yii избежать XSS легко. На месте вывода текста необходими выбрать один из двух вариантов:
В Yii избежать XSS легко. На месте вывода текста необходимо выбрать один из двух вариантов:
1. Вы хотите вывести данные в виде обычного текста.
2. Вы хотите вывести данные в виде HTML.

8
docs/guide-ru/security-passwords.md

@ -4,7 +4,7 @@
> Примечание: этот раздел находится на стадии разработки.
Хорошая безопасность является жизненно важной для жизни и успеха любого приложения.
К сожалению, многие разработчики предпочитают упрощять, когда речь заходит о безопасности,
К сожалению, многие разработчики предпочитают упрощать, когда речь заходит о безопасности,
либо из-за отсутствия понимания, либо потому, что считают реализацию слишком сложной.
Для того, чтобы сделанное вами на Yii приложение было как можно более безопасным, в Yii есть несколько удобных
и простых в использовании функций обеспечения безопасности.
@ -18,7 +18,7 @@
оборудование позволяет подобрать эти хеши очень быстро, методом простого перебора.
Для того, чтобы обеспечить повышенную безопасность паролей ваших пользователей даже в худшем случае (ваше
приложение взломано), нужно использовать алгоритм шифрования, устоичивый к атаке перебором. Лучший вариант в текущий
приложение взломано), нужно использовать алгоритм шифрования, устойчивый к атаке перебором. Лучший вариант в текущий
момент `bcrypt`. В PHP вы можете использовать хеши `bcrypt` через [функцию crypt](http://php.net/manual/en/function.crypt.php).
Yii обеспечивает две вспомогательные функции, которые упрощают использование функции `crypt` для генерации и проверки
пароля.
@ -30,9 +30,9 @@ Yii обеспечивает две вспомогательные функци
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
```
Хеш можно связать с соответствующим аттрибутом модели, так чтобы он сохранялся в базе для последующего использования.
Хеш можно связать с соответствующим атрибутом модели, так чтобы он сохранялся в базе для последующего использования.
Когда пользователь попытается войти, отправленый пароль должен быть хеширован и сравнён с ранее сохранённым хешем:
Когда пользователь попытается войти, отправленный пароль должен быть хеширован и сравнён с ранее сохранённым хешем:
```php
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {

2
docs/guide-ru/start-databases.md

@ -215,4 +215,4 @@ http://hostname/index.php?r=country/index&page=2
В этом разделе вы научились работать с базой данных. Также вы научились получать и отображать данные с постраничной разбивкой с помощью [[yii\data\Pagination]] и [[yii\widgets\LinkPager]].
В следующем разделе вы научитесь использовать мощный инструмент генерации кода, называемый [Gii](tool-gii.md), чтобы с его помощью быстро осуществлять некоторые частоиспользуемые функции, такие, как операции Create-Read-Update-Delete (CRUD) для работы с данными в таблице базы данных. На самом деле код, который вы только что написали, в Yii может быть полностью сгенерирован автоматически с использованием Gii.
В следующем разделе вы научитесь использовать мощный инструмент генерации кода, называемый [Gii](tool-gii.md), чтобы с его помощью быстро осуществлять некоторые часто используемые функции, такие, как операции Create-Read-Update-Delete (CRUD) для работы с данными в таблице базы данных. На самом деле код, который вы только что написали, в Yii может быть полностью сгенерирован автоматически с использованием Gii.

2
docs/guide-ru/start-gii.md

@ -15,7 +15,7 @@
Запускаем Gii <span id="starting-gii"></span>
------------
[Gii](tool-gii.md) предствален в Yii как [модуль](structure-modules.md). Вы можете активировать Gii,
[Gii](tool-gii.md) представлен в Yii как [модуль](structure-modules.md). Вы можете активировать Gii,
настроив его в свойстве [[yii\base\Application::modules|modules]]. В зависимости от того, каким образом вы создали приложение, вы можете удостовериться в наличии следующего кода в конфигурационном файле `config/web.php`,
```php

0
docs/guide-ru/structure-application-components.md

4
docs/guide-ru/structure-applications.md

@ -66,7 +66,7 @@ $config = require(__DIR__ . '/../config/web.php');
Свойство [[yii\base\Application::basePath|basePath]] часто используется для указания других важных путей (например, путь к
директории runtime, используемой приложением). По этой причине, псевдоним пути `@app` предустановлен и содержит данный путь.
Производные пути могут быть получены с использованием этого псевдонима пути (например, `@app/runtime` указывает на
времененную дирректорию runtime).
времененную директорию runtime).
### Важные свойства <span id="important-properties"></span>
@ -250,7 +250,7 @@ if (YII_ENV_DEV) {
контроллера (без пространства имен) будет равен `PostController`, а полное название класса будет равно `app\controllers\PostController`.
Класс контроллера может также находиться в поддиректории директории, соответствующей этому пространству имен.
Например, ID контроллера `admin/post`, будет соответветствовать полное имя класса контроллера `app\controllers\admin\PostController`.
Например, ID контроллера `admin/post`, будет соответствовать полное имя класса контроллера `app\controllers\admin\PostController`.
Очень важно, чтобы полное имя класса контроллера могло быть использовано [автозагрузкой](concept-autoloading.md) и
соответствующее пространство имен вашего контроллера соответствовало данному свойству. Иначе, Вы получите ошибку

8
docs/guide-ru/structure-assets.md

@ -3,7 +3,7 @@
Ресурс в Yii это файл который может быть задан в Web странице. Это может быть CSS файл, JavaScript файл, изображение или видео файл и т.д. Ресурсы располагаются в Web доступных директориях и обслуживаются непосредственно Web серверами.
Желательно, управлять ресурсами программно. Например, при использовании виджета [[yii\jui\DatePicker]] в странице, автоматически включаются необходимые CSS и JavaScript файлы, вместо того чтобы просить Вас в ручную найти эти файлы и включить их. И когда Вы обновляете виджет до новой версии, будут автоматически использованны новые версии файлов-ресурсов. В этом руководстве будет описана мощная возможность управления ресурсами представленная в Yii.
Желательно, управлять ресурсами программно. Например, при использовании виджета [[yii\jui\DatePicker]] в странице, автоматически включаются необходимые CSS и JavaScript файлы, вместо того чтобы просить Вас в ручную найти эти файлы и включить их. И когда Вы обновляете виджет до новой версии, будут автоматически использованы новые версии файлов-ресурсов. В этом руководстве будет описана мощная возможность управления ресурсами представленная в Yii.
## Комплекты ресурсов <span id="asset-bundles"></span>
@ -148,7 +148,7 @@ class FontAwesomeAsset extends AssetBundle
Это происходит потому, что Composer устанавливает Bower или NPM пакет в директорию, соответствующую этим псевдонимам.
> Примечание: В некоторых пакетах файлы дистрибутива могут находиться в поддиректории. В этом случае, Вы должны задать поддиреторию как значение [[yii\web\AssetBundle::sourcePath|sourcePath]]. Например, [[yii\web\JqueryAsset]] использует `@bower/jquery/dist` вместо `@bower/jquery`.
> Примечание: В некоторых пакетах файлы дистрибутива могут находиться в поддиректории. В этом случае, Вы должны задать поддиректорию как значение [[yii\web\AssetBundle::sourcePath|sourcePath]]. Например, [[yii\web\JqueryAsset]] использует `@bower/jquery/dist` вместо `@bower/jquery`.
## Использование Комплекта Ресурсов<span id="using-asset-bundles"></span>
@ -430,7 +430,7 @@ return [
Yii предоставляет консольную команду с именем `asset` для автоматизации подхода, который мы только что описали.
Чтобы использовать эту команду, Вы должны сначала создать файл конфигурации для описания того, как комплекты ресурсов должны быть скомбинированны, и как они должны быть сгруппированы. Затем Вы можете использовать подкомманду `asset/template`, чтобы сгенерировать первый шаблон и затем отредактировать его под свои нужды.
Чтобы использовать эту команду, Вы должны сначала создать файл конфигурации для описания того, как комплекты ресурсов должны быть скомбинированы, и как они должны быть сгруппированы. Затем Вы можете использовать подкомманду `asset/template`, чтобы сгенерировать первый шаблон и затем отредактировать его под свои нужды.
```
yii asset/template assets.php
@ -474,7 +474,7 @@ return [
Вы должны изменить этот файл и указать в `bundles` параметре, какие комплекты Вы планируете объединить. В параметре `targets` вы должны указать, как комплекты должны быть поделены в группы. Вы можете указать одну или несколько групп, как уже было сказано выше.
> Примечание: Так как псевдонимы путей `@webroot` и `@web` не могут быть использованны в консольном приложении, Вы должны явно задать их в файле конфигурации.
> Примечание: Так как псевдонимы путей `@webroot` и `@web` не могут быть использованы в консольном приложении, Вы должны явно задать их в файле конфигурации.
JavaScript файлы объединены, сжаты и записаны в `js/all-{hash}.js`, где {hash} перенесён из хэша результирующего файла.

2
docs/guide-ru/structure-controllers.md

@ -415,7 +415,7 @@ class SiteController extends Controller
* В противном случае, будет выброшено исключение [[yii\base\InvalidRouteException]].
3. Контроллер последовательно вызывает метод `beforeAction()` приложения, модуля (если контроллер принадлежит модулю) и
самого контроллера.
* Если один из методов вернул `false`, то остальные, невызванные методы `beforeAction` будут пропущены, а выполнение
* Если один из методов вернул `false`, то остальные, не вызванные методы `beforeAction` будут пропущены, а выполнение
действия будет отменено;
* По-умолчанию, каждый вызов метода `beforeAction()` вызовет событие `beforeAction`, на которое вы можете назначить обработчики.
4. Контроллер запускает действие:

Loading…
Cancel
Save