diff --git a/docs/guide-ru/concept-configurations.md b/docs/guide-ru/concept-configurations.md
index ccd2d7a7e1..e2fd4bdfb3 100644
--- a/docs/guide-ru/concept-configurations.md
+++ b/docs/guide-ru/concept-configurations.md
@@ -140,7 +140,7 @@ $config = [
При использовании [виджетов](structure-widgets.md) часто возникает необходимость изменить параметры виджета с помощью
конфигурации. Для создания виджета можно использовать два метода: [[yii\base\Widget::widget()]] и
-[[yii\base\Widget::beginWidget()]]. Оба метода принимают конфигурацию в виде PHP массива:
+[[yii\base\Widget::begin()]]. Оба метода принимают конфигурацию в виде PHP массива:
```php
use yii\widgets\Menu;
diff --git a/docs/guide-ru/concept-di-container.md b/docs/guide-ru/concept-di-container.md
index 31af60fde3..5aa0ce7d2d 100644
--- a/docs/guide-ru/concept-di-container.md
+++ b/docs/guide-ru/concept-di-container.md
@@ -5,16 +5,15 @@
[Статья Мартина Фаулера](http://martinfowler.com/articles/injection.html) хорошо объясняет, почему контейнер внедрения зависимостей является полезным. Здесь, преимущественно, будет объясняться использование контейнера внедрения зависимостей, предоставляемого в Yii.
-
-
Внедрение зависимостей
--------------------
Yii обеспечивает функционал контейнера внедрения зависимостей через класс [[yii\di\Container]]. Он поддерживает следующие виды внедрения зависимостей:
-* Внедрение зависимости через конструктор.
-* Внедрение зависимости через сеттер и свойство.
-* Внедрение зависимости через PHP callback.
+* Внедрение зависимости через конструктор;
+* Внедрение зависимости через сеттер и свойство;
+* Внедрение зависимости через PHP callback;
+* Внедрение зависимости через действие контроллера.
### Внедрение зависимости через конструктор
@@ -71,10 +70,8 @@ $container->get('Foo', [], [
]);
```
-> Информация: Метод [[yii\di\Container::get()]] третьим аргументом принимает массив конфигурации, которым инициализируется
- создаваемый объект. Если класс реализует интерфейс [[yii\base\Configurable]] (например, [[yii\base\Object]]),
- то массив конфигурации передается в последний параметр конструктора класса. Иначе конфигурация применяется уже *после*
- создания объекта.
+> Информация: Метод [[yii\di\Container::get()]] третьим аргументом принимает массив конфигурации, которым инициализируется создаваемый объект. Если класс реализует интерфейс [[yii\base\Configurable]] (например, [[yii\base\Object]]), то массив конфигурации передается в последний параметр конструктора класса. Иначе конфигурация применяется уже *после* создания объекта.
+
### Внедрение зависимости через PHP callback
@@ -100,28 +97,39 @@ class FooBuilder
{
public static function build()
{
- return function () {
- $foo = new Foo(new Bar);
- // ... дополнительная инициализация
- return $foo;
- };
+ $foo = new Foo(new Bar);
+ // ... дополнительная инициализация ...
+ return $foo;
}
}
-$container->set('Foo', FooBuilder::build());
+$container->set('Foo', ['app\helper\FooBuilder', 'build']);
$foo = $container->get('Foo');
```
-Как вы можете видеть, метод `FooBuilder::build()` возвращает анонимную функцию. Тот, кто будет настраивать класс `Foo`,
-теперь не обязан знать, как этот класс устроен.
+Теперь тот, кто будет настраивать класс `Foo`, не обязан знать, как этот класс устроен.
+
+
+### Внедрение зависимости через действие контроллера
+
+Внедрение зависимости через действие контроллера - это специальный тип внедрения зависимостей, использующий указание типов параметров, принимаемых методом, исполняемый во время выполнения кода действия. Этот тип внедрения зависимостей помогает сделать контроллеры MVC *тонкими* и *легкими*, так как нет необходимости настраивать все возможные зависимости контроллера заранее.
+
+```php
+public function actionSend($email, EmailValidator $validator)
+{
+ if ($validator->validate($email)) {
+ // ... отправка email
+ }
+}
+```
Регистрация зависимостей
------------------------
-Вы можете использовать [[yii\di\Container::set()]] для регистрации зависимостей. При регистрации требуется имя зависимости, а также определение зависимости.
-Именем зависимости может быть имя класса, интерфейса или алиас, так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP callback'ом.
+Вы можете использовать [[yii\di\Container::set()]] для регистрации зависимостей. При регистрации требуется имя зависимости, а также определение зависимости. Именем зависимости может быть имя класса, интерфейса или алиас,
+так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP callback'ом.
```php
$container = new \yii\di\Container;
@@ -269,7 +277,7 @@ $lister = new UserLister($finder);
Практическое использование
---------------
-Yii создаёт контейнер внедрения зависимостей когда вы подключаете файл `Yii.php` во [входном скрипте](structure-entry-scripts.md)
+Yii создаёт контейнер внедрения зависимостей когда вы подключаете файл `Yii.php` во [входном скрипте](structure-entry-scripts.md)
вашего приложения. Контейнер внедрения зависимостей доступен через [[Yii::$container]]. При вызове [[Yii::createObject()]],
метод на самом деле вызовет метод контейнера [[yii\di\Container::get()|get()]], чтобы создать новый объект.
Как упомянуто выше, контейнер внедрения зависимостей автоматически разрешит зависимости (если таковые имеются) и внедрит их в только что созданный объект.
diff --git a/docs/guide-ru/db-dao.md b/docs/guide-ru/db-dao.md
index 2b97d70e4b..8065a2a8c1 100644
--- a/docs/guide-ru/db-dao.md
+++ b/docs/guide-ru/db-dao.md
@@ -59,8 +59,7 @@ return [
> Подсказка: Вы можете настроить несколько компонентов подключения, если в вашем приложении используется несколько баз данных.
При настройке подключения, вы должны обязательно указывать Имя Источника Данных (DSN) через параметр [[yii\db\Connection::dsn|dsn]].
-Формат DSN отличается для разных баз данных. По
-The format of DSN varies for different databases. Дополнительное описание смотрите в [справочнике PHP](http://php.net/manual/ru/pdo.construct.php).
+Формат DSN отличается для разных баз данных. Дополнительное описание смотрите в [справочнике PHP](http://php.net/manual/ru/pdo.construct.php).
Ниже представлены несколько примеров:
* MySQL, MariaDB: `mysql:host=localhost;dbname=mydatabase`
@@ -73,7 +72,7 @@ The format of DSN varies for different databases. Дополнительное
* Oracle: `oci:dbname=//localhost:1521/mydatabase`
Заметьте, что если вы подключаетесь к базе данных через ODBC, вам необходимо указать свойство [[yii\db\Connection::driverName]],
-чтобы Yii знал какой тип базы данных используется. Например:
+чтобы Yii знал какой тип базы данных используется. Например,
```php
'db' => [
@@ -142,7 +141,8 @@ $count = $db->createCommand('SELECT COUNT(*) FROM post')
> Подсказка: Если вам необходимо выполнить SQL запрос сразу после установки соединения (например, для установки
> временной зоны или кодировки), вы можете сделать это в обработчике события [[yii\db\Connection::EVENT_AFTER_OPEN]].
-> Например:
+> Например,
+
```php
return [
// ...
@@ -165,7 +165,7 @@ return [
### Привязка параметров
При создании команды из SQL запроса с параметрами, вы почти всегда должны использовать привязку параметров для
-предотвращения атак через SQL инъекции. Например:
+предотвращения атак через SQL инъекции. Например,
```php
$post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
@@ -175,7 +175,7 @@ $post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status')
```
В SQL запрос, вы можете встраивать один или несколько маркеров (например `:id` в примере выше). Маркеры должны быть
-строкой начинающейся с двоеточия. Далее вам нужно вызвать один из следующих методов для привязки значений к параметрам:
+строкой, начинающейся с двоеточия. Далее вам нужно вызвать один из следующих методов для привязки значений к параметрам:
* [[yii\db\Command::bindValue()|bindValue()]]: привязка одного параметра по значению
* [[yii\db\Command::bindValues()|bindValues()]]: привязка нескольких параметров в одном вызове
@@ -197,7 +197,7 @@ $post = $db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status',
Привязка переменных реализована через [подготавливаемые запросы](http://php.net/manual/ru/mysqli.quickstart.prepared-statements.php).
Помимо предотвращения атак путём SQL инъекций, это увеличивает производительность, так как запрос подготавливается
-один раз, а потом выполняется много раз с разными параметрами. Например:
+один раз, а потом выполняется много раз с разными параметрами. Например,
```php
$command = $db->createCommand('SELECT * FROM post WHERE id=:id');
@@ -227,7 +227,7 @@ $post2 = $command->queryOne();
### Выполнение Не-SELECT запросов
В методах `queryXyz()`, описанных в предыдущих разделах, вызываются SELECT запросы для извлечения данных из базы.
-Для запросов не возвращающих данные, вы должны использовать метод [[yii\db\Command::execute()]]. Например:
+Для запросов не возвращающих данные, вы должны использовать метод [[yii\db\Command::execute()]]. Например,
```php
$db->createCommand('UPDATE post SET status=1 WHERE id=1')
@@ -238,7 +238,7 @@ $db->createCommand('UPDATE post SET status=1 WHERE id=1')
Для запросов INSERT, UPDATE и DELETE, вместо написания чистого SQL, вы можете вызвать методы [[yii\db\Command::insert()|insert()]],
[[yii\db\Command::update()|update()]], [[yii\db\Command::delete()|delete()]], соответственно, для создания указанных
-SQL конструкций. Например:
+SQL конструкций. Например,
```php
// INSERT (table name, column values)
@@ -307,7 +307,7 @@ return [
Затем в коде, когда вам нужно ссылаться на таблицу, имя которой содержит такой префикс, используйте синтаксис `{{%table name}}`.
Символ процента будет автоматический заменён на префикс таблицы, который вы указали во время конфигурации соединения с
-базой данных. Например:
+базой данных. Например,
```php
// для MySQL будет выполнен следующий SQL: SELECT COUNT(`id`) FROM `tbl_employee`
@@ -426,12 +426,12 @@ try {
try {
$db->createCommand($sql2)->execute();
$innerTransaction->commit();
- } catch (Exception $e) {
+ } catch (\Exception $e) {
$innerTransaction->rollBack();
}
$outerTransaction->commit();
-} catch (Exception $e) {
+} catch (\Exception $e) {
$outerTransaction->rollBack();
}
```
@@ -478,7 +478,7 @@ try {
Вышеуказанная конфигурация определяет систему с одним мастером и несколькими подчинёнными. Один из подчинённых
будет подключен и использован для чтения, в то время как мастер будет использоваться для запросов записи.
-Такое разделение чтения и записи будет осуществлено автоматический с указанной конфигурацией. Например:
+Такое разделение чтения и записи будет осуществлено автоматический с указанной конфигурацией. Например,
```php
// создание экземпляра соединения, использующего вышеуказанную конфигурацию
@@ -506,7 +506,7 @@ $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
Это означает, что если сервер не ответит за 10 секунд, он будет считаться "мёртвым". Вы можете отрегулировать
этот параметр исходя из настроек вашей среды.
-Вы также можете настроить несколько основных и несколько подчинённых серверов. Например:
+Вы также можете настроить несколько основных и несколько подчинённых серверов. Например,
```php
[
@@ -625,7 +625,7 @@ $db->createCommand()->createTable('post', [
```
Вы также сможете получить описание схемы таблицы через вызов метода [[yii\db\Connection::getTableSchema()|getTableSchema()]].
-Например:
+Например,
```php
$table = $db->getTableSchema('post');
diff --git a/docs/guide-ru/db-migrations.md b/docs/guide-ru/db-migrations.md
index 17d2c9bf98..2fa0214ed3 100644
--- a/docs/guide-ru/db-migrations.md
+++ b/docs/guide-ru/db-migrations.md
@@ -1,7 +1,7 @@
Миграции Баз Данных
==================
-В ходе разработки и ведения баз данных приложений, которые управляют данными, структуры используемых баз данных развиваются как и исходный код приложений. Например, при разработке приложения, в будущем может оказаться необходимой новая таблица; уже после того, как приложение будет развернуто в рабочем режиме (продакшене), также может быть обнаружено, что для повышения производительности запросов должен быть создан определённый индекс; и так далее.
+В ходе разработки и ведения баз данных приложений, которые управляют данными, структуры используемых баз данных развиваются, как и исходный код приложений. Например, при разработке приложения, в будущем может оказаться необходимой новая таблица; уже после того, как приложение будет развернуто в рабочем режиме (продакшене), также может быть обнаружено, что для повышения производительности запросов должен быть создан определённый индекс; и так далее.
В связи с тем, что изменение структуры базы данных часто требует изменение исходного кода, yii поддерживает так
называемую возможность *миграции баз данных*, которая позволяет отслеживать изменения в базах данных при помощи терминов *миграции баз данных*, которые являются системой контроля версий вместе с исходным кодом.
@@ -28,6 +28,9 @@ Yii предоставляет набор инструментов для миг
Все эти инструменты доступны через команду `yii migrate`. В этом разделе мы опишем подробно, как выполнять различные задачи, используя эти инструменты. Вы также можете сами посмотреть как использовать каждый отдельный инструмент при помощи команды `yii help migrate`.
+> Подсказка: Миграции могут не только изменять схему базы данных, но и приводить данные в соответствие с новой схемой, создавать иерархию RBAC или очищать кеш.
+
+
## Создание миграций
Чтобы создать новую миграцию, выполните следующую команду:
@@ -49,20 +52,32 @@ yii migrate/create create_news_table
```php
dropTable('news');
}
-
}
```
-> Для справки: Не все миграции являются обратимыми. Например, если метод `up()` удаляет строку из таблицы, возможно что у вас уже не будет возможности вернуть эту строку методом `down()`. Иногда Вам может быть просто слишком лень реализовывать метод `down()`, в связи с тем, что это не очень распространено - откатывать миграции базы данных. В этом случае вы должны в методе `down()` вернуть `false`, чтобы указать, что миграция не является обратимой.
+> Информация: Не все миграции являются обратимыми. Например, если метод `up()` удаляет строку из таблицы, возможно что у вас уже не будет возможности вернуть эту строку методом `down()`. Иногда Вам может быть просто слишком лень реализовывать метод `down()`, в связи с тем, что это не очень распространено - откатывать миграции базы данных. В этом случае вы должны в методе `down()` вернуть `false`, чтобы указать, что миграция не является обратимой.
Базовый класс миграций [[yii\db\Migration]] предоставляет подключение к базе данных через свойство [[yii\db\Migration::db|db]]. Вы можете использовать его для манипулирования схемой базы данных используя методы описанные в [работе со схемой базы данных](db-dao.md#database-schema).
@@ -111,7 +126,36 @@ class m150101_185401_create_news_table extends \yii\db\Migration
Вы можете добавить дополнительные ограничения при использовании абстрактных типов. В приведенном выше примере, ` NOT NULL` добавляется к `Schema::TYPE_STRING` чтобы указать, что столбец не может быть NULL.
-> Для справки: Сопоставление абстрактных типов и физических типов определяется свойством [[yii\db\QueryBuilder::$typeMap|$typeMap]] в каждом конкретном `QueryBuilder` классе.
+> Информация: Сопоставление абстрактных типов и физических типов определяется свойством [[yii\db\QueryBuilder::$typeMap|$typeMap]] в каждом конкретном `QueryBuilder` классе.
+
+Начиная с версии 2.0.6, появился новый построитель схем, который является более удобным инструментом для описания структуры столбцов.
+Теперь, при написании миграций, можно использовать такой код:
+
+```php
+createTable('news', [
+ 'id' => $this->primaryKey(),
+ 'title' => $this->string()->notNull(),
+ 'content' => $this->text(),
+ ]);
+ }
+
+ public function down()
+ {
+ $this->dropTable('news');
+ }
+}
+```
+
+Весь список методов описания типов столбцов доступен в API документации [[yii\db\SchemaBuilderTrait]].
+
### Транзакции Миграций
@@ -122,8 +166,8 @@ class m150101_185401_create_news_table extends \yii\db\Migration
В следующем примере, помимо создания таблицы `news` мы также вставляем в этой таблице начальную строку.
```php
+createTable('news', [
- 'id' => 'pk',
- 'title' => Schema::TYPE_STRING . ' NOT NULL',
- 'content' => Schema::TYPE_TEXT,
+ 'id' => $this->primaryKey(),
+ 'title' => $this->string()->notNull(),
+ 'content' => $this->text(),
]);
-
+
$this->insert('news', [
'title' => 'test 1',
'content' => 'content 1',
@@ -184,7 +228,10 @@ class m150101_185401_create_news_table extends Migration
* [[yii\db\Migration::createIndex()|createIndex()]]: создание индекса
* [[yii\db\Migration::dropIndex()|dropIndex()]]: удаление индекса
-> Примечание: [[yii\db\Migration]] не предоставляет методы запросов к базе данных. Это потому, что обычно не требуется отображать дополнительные сообщения об извлечении данных из базы данных. Это также, потому, что можно использовать более мощный [Построитель Запросов](db-query-builder.md) для построения и выполнения сложных запросов.
+> Информация: [[yii\db\Migration]] не предоставляет методы запросов к базе данных. Это потому, что обычно не требуется отображать дополнительные сообщения об извлечении данных из базы данных. Это также, потому, что можно использовать более мощный [Построитель Запросов](db-query-builder.md) для построения и выполнения сложных запросов.
+
+> Примечание: при обработке данных внутри миграции, может показаться, что использование существующих классов [Active Record](db-active-record.md), со всей их готовой бизнес логикой, будет разумным решением и упросит код миграции. Однако, следует помнить, что код миграций не должен меняться, по определению. В отличии от миграций, бизнес логика приложений часто изменяется. Это может привести к нарушению работы миграции при определённых изменениях на уровне Active Record. Поэтому рекомендуется делать миграции независимыми от других частей приложения, таких как классы Active Record.
+
## Применение Миграций
@@ -327,7 +374,8 @@ yii migrate --db=db2
Иногда может случиться так, что Вы захотите применить *некоторые* из миграций к одной базе данных, а некоторые другие к другой базе данных. Для достижения этой цели, при реализации класса миграции, необходимо явно указать идентификатор ID компонента базы данных, который миграция будет использовать, следующим образом:
```php
-use yii\db\Schema;
+ Информация: В основном вы будете работать с [[yii\db\Query]] вместо [[yii\db\QueryBuilder]]. Последний вызывается
- неявно при вызове одного из методов запроса. [[yii\db\QueryBuilder]] это класс отвечающий за генерацию зависимого
+ неявно при вызове одного из методов запроса. [[yii\db\QueryBuilder]] это класс, отвечающий за генерацию зависимого
от СУБД SQL выражения (такие как экранирование имён таблиц/столбцов) из независимых от СУБД объектов [[yii\db\Query]].
@@ -58,7 +58,7 @@ $query->select(['id', 'email']);
$query->select('id, email');
```
-Имена столбцов могут быть выбраны вместе с префиксами таблиц и/или алиасами столбцов, также как при записи обычного SQL.
+Имена столбцов могут быть выбраны вместе с префиксами таблиц и/или алиасами столбцов, также как при записи обычного SQL выражения.
Например,
```php
@@ -80,14 +80,14 @@ $query->select(['user_id' => 'user.id', 'email']);
выбрать *все* столбцы.
Кроме имён столбцов, вы можете также использовать SQL выражения. Вы должны использовать формат массива для использования
-выражений, которые содержат запятые для предотвращения некорректного автоматического экранирования. Например:
+выражений, которые содержат запятые для предотвращения некорректного автоматического экранирования. Например,
```php
$query->select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']);
```
Начиная с версии 2.0.1, вы также можете использовать подзапросы. Вы должны указывать каждый подзапрос в выражении как
-объект [[yii\db\Query]]. Например:
+объект [[yii\db\Query]]. Например,
```php
$subQuery = (new Query())->select('COUNT(*)')->from('user');
@@ -103,7 +103,7 @@ $query = (new Query())->select(['id', 'count' => $subQuery])->from('post');
$query->select('user_id')->distinct();
```
-Вы можете вызвать [[yii\db\Query::addSelect()|addSelect()]] для добавления полей. Например:
+Вы можете вызвать [[yii\db\Query::addSelect()|addSelect()]] для добавления полей. Например,
```php
$query->select(['id', 'username'])
@@ -113,7 +113,7 @@ $query->select(['id', 'username'])
### [[yii\db\Query::from()|from()]]
-Метод [[yii\db\Query::from()|from()]] указывает фрагмент `FROM` SQL запроса. Например:
+Метод [[yii\db\Query::from()|from()]] указывает фрагмент `FROM` SQL запроса. Например,
```php
// SELECT * FROM `user`
@@ -121,7 +121,7 @@ $query->from('user');
```
Вы можете указать имена таблиц в виде строки или массива. Имена таблиц могут содержать префикс схемы и/или алиасы
-таблиц, как при написании обычного SQL. Например:
+таблиц, как при написании обычного SQL выражения. Например,
```php
$query->from(['public.user u', 'public.post p']);
@@ -137,7 +137,7 @@ $query->from('public.user u, public.post p');
$query->from(['u' => 'public.user', 'p' => 'public.post']);
```
-Кроме имён таблиц, вы можете, также как и в select, указывать подзапросы в виде объекта [[yii\db\Query]].
+Кроме имён таблиц, вы можете, также, как и в select, указывать подзапросы в виде объекта [[yii\db\Query]].
```php
$subQuery = (new Query())->select('id')->from('user')->where('status=1');
@@ -152,14 +152,14 @@ $query->from(['u' => $subQuery]);
Метод [[yii\db\Query::where()|where()]] определяет фрагмент `WHERE` SQL выражения. Вы можете использовать один из
трёх форматов:
-- строковый формат, например: `'status=1'`
-- формат массива, например: `['status' => 1, 'type' => 2]`
-- формат операторов, например: `['like', 'name', 'test']`
+- строковый формат, Например, `'status=1'`
+- формат массива, Например, `['status' => 1, 'type' => 2]`
+- формат операторов, Например, `['like', 'name', 'test']`
#### Строковый формат
-Строковый формат - это лучший выбор для простых условий. Он работает так, будто вы просто пишете SQL запрос. Например:
+Строковый формат - это лучший выбор для простых условий. Он работает так, будто вы просто пишете SQL запрос. Например,
```php
$query->where('status=1');
@@ -281,7 +281,7 @@ $query->where(['id' => $userQuery]);
Вы можете использовать [[yii\db\Query::andWhere()|andWhere()]] или [[yii\db\Query::orWhere()|orWhere()]] для добавления
дополнительных условий. Вы можете использовать эти вызовы несколько раз для добавления нескольких условий.
-Например:
+Например,
```php
$status = 10;
@@ -317,7 +317,7 @@ $query->filterWhere([
```
Единственное отличие между [[yii\db\Query::filterWhere()|filterWhere()]] и [[yii\db\Query::where()|where()]]
-заключается в игнорировании пустых значений переданных в условие в [форме массива](#hash-format). Таким образом
+заключается в игнорировании пустых значений, переданных в условие в [форме массива](#hash-format). Таким образом
если `$email` будет пустым, а `$username` нет, то приведённый выше код сформирует `...WHERE username=:username`.
> Информация: значение признаётся пустым, если это null, пустой массив, пустая строка или строка состоящая из одних пробельных символов.
@@ -339,7 +339,7 @@ $query->orderBy([
]);
```
-В данном коде, ключи массива это имена столбцов, а значения массива это соответствующее направление сортировки.
+В данном коде, ключи массива - это имена столбцов, а значения массива - это соответствующее направление сортировки.
PHP константа `SORT_ASC` определяет сортировку по возрастанию и `SORT_DESC` сортировка по умолчанию.
Если `ORDER BY` содержит только простые имена столбцов, вы можете определить их с помощью столбцов, также
@@ -369,7 +369,7 @@ $query->groupBy(['id', 'status']);
```
Если фрагмент `GROUP BY` содержит только простые имена столбцов, вы можете указать их используя строку, также как в
-обычном SQL.
+обычном SQL выражении.
```php
$query->groupBy('id, status');
@@ -501,7 +501,7 @@ $query1->union($query2);
[[yii\db\Query::max()|max($q)]], [[yii\db\Query::min()|min($q)]]. Параметр `$q` обязателен для этих методов и могут
содержать либо имя столбца, либо выражение БД.
-Например:
+Например,
```php
// SELECT `id`, `email` FROM `user`
@@ -520,7 +520,7 @@ $row = (new \yii\db\Query())
> Примечание: метод [[yii\db\Query::one()|one()]] вернёт только первую строку результата запроса. Он НЕ добавляет
`LIMIT 1` в генерируемый SQL. Это хорошо и предпочтительно если вы знаете, что запрос вернёт только одну или несколько
строк данных (например, при запросе по первичному ключу). Однако, если запрос потенциально может вернут много
- строк данных, вы должны вызвать `limit(1)` для повышения производительности, Например:
+ строк данных, вы должны вызвать `limit(1)` для повышения производительности, Например,
`(new \yii\db\Query())->from('user')->limit(1)->one()`.
Все методы выборки могут получать необязательный параметр `$db`, представляющий [[yii\db\Connection|соединение с БД]],
@@ -566,7 +566,7 @@ $rows = $command->queryAll();
### Индексация результатов запроса
При вызове [[yii\db\Query::all()|all()]] возвращается массив строк индексированный последовательными целыми числами.
-Иногда вам может потребоваться индексировать его по другому, например сделать индекс по указанному столбцу или
+Иногда вам может потребоваться индексировать его по-другому, например, сделать индекс по указанному столбцу или
значением выражения. Вы можете реализовать такое поведение через вызов [[yii\db\Query::indexBy()|indexBy()]] перед
вызовом [[yii\db\Query::all()|all()]].
diff --git a/docs/guide/concept-di-container.md b/docs/guide/concept-di-container.md
index bcb32b52c1..8346f38c1b 100644
--- a/docs/guide/concept-di-container.md
+++ b/docs/guide/concept-di-container.md
@@ -14,7 +14,7 @@ dependency injection:
* Constructor injection;
* Setter and property injection;
-* PHP callable injection.
+* PHP callable injection;
* Controller action injection.
@@ -133,6 +133,7 @@ public function actionSend($email, EmailValidator $validator)
}
```
+
Registering Dependencies
------------------------