## Создание расширений <a name="creating-extensions"></a>
You may consider creating an extension when you feel the need to share with other people your great code.
Вы можете захотеть создать расширение, когда чувствуете необходимость поделиться своим хорошим кодом с другими людьми.
An extension can contain any code you like, such as a helper class, a widget, a module, etc.
Расширение может содержать любой код, который вам нравится, например, класс-помощник, виджет, модуль и т.д.
It is recommended that you create an extension in terms of a [Composer package](https://getcomposer.org/) so that
Рекомендуется создавать расширение как [пакет Composer](https://getcomposer.org/), для того, чтобы его можно было
it can be more easily installed and used by other users, liked described in the last subsection.
легко установить и использовать, как описано в предыдущей главе.
Below are the basic steps you may follow to create an extension as a Composer package.
Ниже приведены основные шаги, которым нужно следовать, чтобы создать пакет Composer.
1.Create a project for your extension and host it on a VCS repository, such as[github.com](https://github.com).
1.Создайте проект для вашего расширения и разместите его в VCS репозитории, таком как[github.com](https://github.com).
The development and maintenance work about the extension should be done on this repository.
Разработка и поддержка расширения должна выполняться в этом репозитории.
2.Under the root directory of the project, create a file named `composer.json` as required by Composer. Please
2.В корневой директории проекта создайте файл под названием `composer.json`, в соответствии с требованиями Composer.
refer to the next subsection for more details.
Вы можете обратиться к следующему разделу за более подробной информацией.
3.Register your extension with a Composer repository, such as [Packagist](https://packagist.org/), so that
3.Зарегистрируйте ваше расширение в репозитории Composer, таком как [Packagist](https://packagist.org/), чтобы другие
other users can find and install your extension using Composer.
пользователи могли найти и установить ваше расширение, используя Composer.
### `composer.json` <a name="composer-json"></a>
### `composer.json` <a name="composer-json"></a>
Each Composer package must have a `composer.json` file in its root directory. The file contains the metadata about
Каждый пакет Composer должен иметь файл `composer.json` в своей корневой директории. Этот файл содержит метаданные о
the package. You may find complete specification about this file in the [Composer Manual](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup).
пакете. Вы можете найти полную спецификацию по этому файлу в
The following example shows the `composer.json` file for the `yiisoft/yii2-imagine` extension:
[Руководстве Composer](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup). Следующий пример
демонстрирует файл `composer.json` для расширения `yiisoft/yii2-imagine`:
```json
```json
{
{
//packagename
//названиепакета
"name":"yiisoft/yii2-imagine",
"name":"yiisoft/yii2-imagine",
//packagetype
//типпакета
"type":"yii2-extension",
"type":"yii2-extension",
"description":"The Imagine integration for the Yii framework",
"description":"The Imagine integration for the Yii framework",
...
@@ -139,13 +142,13 @@ The following example shows the `composer.json` file for the `yiisoft/yii2-imagi
...
@@ -139,13 +142,13 @@ The following example shows the `composer.json` file for the `yiisoft/yii2-imagi
}
}
],
],
//packagedependencies
//зависимостипакета
"require":{
"require":{
"yiisoft/yii2":"*",
"yiisoft/yii2":"*",
"imagine/imagine":"v0.5.0"
"imagine/imagine":"v0.5.0"
},
},
//classautoloadingspecs
//указаниеавтозагрузчикаклассов
"autoload":{
"autoload":{
"psr-4":{
"psr-4":{
"yii\\imagine\\":""
"yii\\imagine\\":""
...
@@ -155,40 +158,41 @@ The following example shows the `composer.json` file for the `yiisoft/yii2-imagi
...
@@ -155,40 +158,41 @@ The following example shows the `composer.json` file for the `yiisoft/yii2-imagi
```
```
#### Package Name <a name="package-name"></a>
#### Название пакета <a name="package-name"></a>
Each Composer package should have a package name which uniquely identifies the package among all others.
Каждый пакет Composer должен иметь название, которое однозначно идентифицирует пакет среди остальных. Название пакета
The format of package names is `vendorName/projectName`. For example, in the package name `yiisoft/yii2-imagine`,
имеет формат `имяРазработчика/названиеПроекта`. Например, в пакете `yiisoft/yii2-imagine`, `yiisoft` является именем
the vendor name and the project name are `yiisoft` and `yii2-imagine`, respectively.
разработчика, а `yii2-imagine` - названием пакета.
Do NOT use `yiisoft` as vendor name as it is reserved for use by the Yii core code.
НЕ используйте `yiisoft` в качестве имени разработчика, так как оно зарезервировано для использования в коде ядра Yii.
We recommend you prefix `yii2-` to the project name for packages representing Yii 2 extensions, for example,
Мы рекомендуем использовать префикс `yii2-` в названии проекта для пакетов, являющихся расширениями Yii 2, например,
`myname/yii2-mywidget`. This will allow users to more easily tell whether a package is a Yii 2 extension.
`моёИмя/yii2-mywidget`. Это позволит пользователям легче определить, что пакет является расширением Yii2.
#### Package Type <a name="package-type"></a>
#### Тип пакета <a name="package-type"></a>
It is important that you specify the package type of your extension as `yii2-extension` so that the package can
Важно указать тип пакета вашего расширения как `yii2-extension`, чтобы пакет можно было распознать как расширение Yii во
be recognized as a Yii extension when being installed.
время установки.
When a user runs `php composer.phar install` to install an extension, the file `vendor/yiisoft/extensions.php`
Когда пользователь запускает команду `php composer.phar install` для установки расширения, файл
will be automatically updated to include the information about the new extension. From this file, Yii applications
`vendor/yiisoft/extensions.php` будет автоматически обновлён, чтобы включить информацию о новом расширении. Из этого
can know which extensions are installed (the information can be accessed via [[yii\base\Application::extensions]].
файла приложение Yii может узнать, какие расширения установлены (информацию можно получить с помощью
[[yii\base\Application::extensions]]).
#### Dependencies <a name="dependencies"></a>
#### Зависимости <a name="dependencies"></a>
Your extension depends on Yii (of course). So you should list it in the `require` entry in `composer.json`.
Ваше расширение зависит от Yii (естественно). Вы можете посмотреть список зависимостей в секции `require`, входящей в
If your extension also depends on other extensions or third-party libraries, you should list them as well.
файл `composer.json`. Если ваше расширение зависит от других расширений или сторонних библиотек, то вы также должны их
Make sure you also list appropriate version constraints (e.g. `1.*`, `@stable`) for each dependency. Use stable
перечислить. Убедитесь, что в ограничениях вы указали соответствующую версию (например, `1.*`, `@stable`) для каждой
dependencies when your extension is released in a stable version.
зависимости. Используйте стабильные версии зависимостей, когда будет выпущена стабильная версия вашего расширения.
#### Class Autoloading <a name="class-autoloading"></a>
#### Автозагрузка классов <a name="class-autoloading"></a>
In order for your classes to be autoloaded by the Yii class autoloader or the Composer class autoloader,
Для того, чтобы ваши классы были загружены автозагрузчиком классов Yii или автозагрузчиком классов Composer, вы должны
you should specify the `autoload` entry in the `composer.json` file, like shown below:
внести секцию `autoload` в файл `composer.json`, как показано ниже:
```json
```json
{
{
...
@@ -202,41 +206,44 @@ you should specify the `autoload` entry in the `composer.json` file, like shown
...
@@ -202,41 +206,44 @@ you should specify the `autoload` entry in the `composer.json` file, like shown
}
}
```
```
You may list one or multiple root namespaces and their corresponding file paths.
Вы можете перечислить один или несколько корневых пространств имён и соответствующие им пути.
When the extension is installed in an application, Yii will create for each listed root namespace
Когда расширение установлено в приложение, Yii для каждого указанного корневого пространства имён создаст
an [alias](concept-aliases.md#extension-aliases) that refers to the directory corresponding to the namespace.
[псевдоним](concept-aliases.md#extension-aliases), который указывает на директорию, соответствующую пространству имён.
For example, the above `autoload` declaration will correspond to an alias named`@yii/imagine`.
Например, указанная в секции `autoload` запись будет соответствовать псевдониму`@yii/imagine`.