## Создание расширений <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
it can be more easily installed and used by other users, liked described in the last subsection.
Рекомендуется создавать расширение как [пакет Composer](https://getcomposer.org/), для того, чтобы его можно было
легко установить и использовать, как описано в предыдущей главе.
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).
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
refer to the next subsection for more details.
3.Register your extension with a Composer repository, such as [Packagist](https://packagist.org/), so that
other users can find and install your extension using Composer.
1.Создайте проект для вашего расширения и разместите его в VCS репозитории, таком как[github.com](https://github.com).
Разработка и поддержка расширения должна выполняться в этом репозитории.
2.В корневой директории проекта создайте файл под названием `composer.json`, в соответствии с требованиями Composer.
Вы можете обратиться к следующему разделу за более подробной информацией.
3.Зарегистрируйте ваше расширение в репозитории Composer, таком как [Packagist](https://packagist.org/), чтобы другие
пользователи могли найти и установить ваше расширение, используя Composer.
### `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
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 должен иметь файл `composer.json` в своей корневой директории. Этот файл содержит метаданные о
пакете. Вы можете найти полную спецификацию по этому файлу в
[Руководстве Composer](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup). Следующий пример
демонстрирует файл `composer.json` для расширения `yiisoft/yii2-imagine`:
```json
{
//packagename
//названиепакета
"name":"yiisoft/yii2-imagine",
//packagetype
//типпакета
"type":"yii2-extension",
"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
}
],
//packagedependencies
//зависимостипакета
"require":{
"yiisoft/yii2":"*",
"imagine/imagine":"v0.5.0"
},
//classautoloadingspecs
//указаниеавтозагрузчикаклассов
"autoload":{
"psr-4":{
"yii\\imagine\\":""
...
...
@@ -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.
The format of package names is `vendorName/projectName`. For example, in the package name `yiisoft/yii2-imagine`,
the vendor name and the project name are `yiisoft` and `yii2-imagine`, respectively.
Каждый пакет Composer должен иметь название, которое однозначно идентифицирует пакет среди остальных. Название пакета
имеет формат `имяРазработчика/названиеПроекта`. Например, в пакете `yiisoft/yii2-imagine`, `yiisoft` является именем
разработчика, а `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,
`myname/yii2-mywidget`. This will allow users to more easily tell whether a package is a Yii 2 extension.
Мы рекомендуем использовать префикс `yii2-` в названии проекта для пакетов, являющихся расширениями Yii 2, например,
`моёИмя/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
be recognized as a Yii extension when being installed.
Важно указать тип пакета вашего расширения как `yii2-extension`, чтобы пакет можно было распознать как расширение Yii во
время установки.
When a user runs `php composer.phar install` to install an extension, the file `vendor/yiisoft/extensions.php`
will be automatically updated to include the information about the new extension. From this file, Yii applications
can know which extensions are installed (the information can be accessed via [[yii\base\Application::extensions]].
Когда пользователь запускает команду `php composer.phar install` для установки расширения, файл
`vendor/yiisoft/extensions.php` будет автоматически обновлён, чтобы включить информацию о новом расширении. Из этого
файла приложение 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`.
If your extension also depends on other extensions or third-party libraries, you should list them as well.
Make sure you also list appropriate version constraints (e.g. `1.*`, `@stable`) for each dependency. Use stable
dependencies when your extension is released in a stable version.
Ваше расширение зависит от Yii (естественно). Вы можете посмотреть список зависимостей в секции `require`, входящей в
файл `composer.json`. Если ваше расширение зависит от других расширений или сторонних библиотек, то вы также должны их
перечислить. Убедитесь, что в ограничениях вы указали соответствующую версию (например, `1.*`, `@stable`) для каждой
зависимости. Используйте стабильные версии зависимостей, когда будет выпущена стабильная версия вашего расширения.
#### 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,
you should specify the `autoload` entry in the `composer.json` file, like shown below:
Для того, чтобы ваши классы были загружены автозагрузчиком классов Yii или автозагрузчиком классов Composer, вы должны
внести секцию `autoload` в файл `composer.json`, как показано ниже:
```json
{
...
...
@@ -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
an [alias](concept-aliases.md#extension-aliases) that refers to the directory corresponding to the namespace.
For example, the above `autoload` declaration will correspond to an alias named`@yii/imagine`.
Когда расширение установлено в приложение, Yii для каждого указанного корневого пространства имён создаст
[псевдоним](concept-aliases.md#extension-aliases), который указывает на директорию, соответствующую пространству имён.
Например, указанная в секции `autoload` запись будет соответствовать псевдониму`@yii/imagine`.