Расширения - это распространяемые программные пакеты, специально разработанные для использования в приложениях Yii и содержащие готовые функции. Например, расширение yiisoft/yii2-debug добавляет удобную отладочную панель в нижнюю часть каждой страницы вашего приложения, чтобы помочь вам разобраться в том, как генерируются страницы. Вы можете использовать расширения для ускорения процесса разработки. Вы также можете оформить ваш код как расширение, чтобы поделиться с другими людьми результатами вашей работы.
Информация: Мы используем термин "расширение" для специфичных для Yii программных пакетов. Программные пакеты общего назначения, которые могут быть использованы без Yii, мы будем называть "пакет" или "библиотека".
Чтобы использовать расширение, вам необходимо установить его. Большинство расширений распространяются как пакеты Composer, которые могут быть установлены посредством следующих двух шагов:
composer.json
, указав, какие расширения (пакеты Composer) вы хотите
установить.php composer.phar install
, чтобы установить указанные расширения.Обратите внимание, что вам может потребоваться установить Composer, если у вас его нет.
По умолчанию, Composer устанавливает пакеты, зарегистрированные на Packagist - крупнейшем репозитории для пакетов Composer с открытым исходным кодом. Вы также можете создать свой репозиторий и настроить Composer для его использования. Это полезно, если вы разрабатываете закрытые расширения и хотите использовать их в нескольких своих проектах.
Расширения, установленные Composer'ом, хранятся в директории BasePath/vendor
, где BasePath
-
базовая директория приложения. Composer - это менеджер зависимостей, и поэтому
после установки пакета он также установит все зависимые пакеты.
Например, для установки расширения yiisoft/yii2-imagine
нужно отредактировать ваш composer.json
как показано далее:
{
// ...
"require": {
// ... другие зависимости
"yiisoft/yii2-imagine": "~2.0.0"
}
}
После установки вы можете увидеть директорию yiisoft/yii2-imagine
, находящуюся по пути BasePath/vendor
. Также вы
можете увидеть директорию imagine/imagine
, которая содержит зависимый пакет.
Информация:
yiisoft/yii2-imagine
является базовым расширением, которое разрабатывает и поддерживает команда разработчиков Yii. Все базовые расширения размещены на Packagist и называютсяyiisoft/yii2-xyz
, гдеxyz
является названием расширения.
Теперь вы можете использовать установленное расширение как часть вашего приложения. Следующий пример показывает, как вы
можете использовать класс yii\imagine\Image
, который содержится в расширении yiisoft/yii2-imagine
.
use Yii;
use yii\imagine\Image;
// генерация миниатюры изображения
Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
->save(Yii::getAlias('@runtime/thumb-test-image.jpg'), ['quality' => 50]);
Информация: Классы расширений автоматически загружаются автозагрузчиком классов Yii.
В некоторых редких случаях вы можете захотеть установить некоторые расширения вручную, а не полагаться на Composer. Чтобы сделать это, вы должны
vendor
.Если расширение не имеет автозагрузчика классов, но следует стандарту PSR-4, то вы
можете использовать автозагрузчик классов, предоставленный Yii для загрузки классов расширений. Всё, что вам нужно
сделать, это объявить псевдоним для корневого каталога расширения. Например,
если вы установили расширение в директорию vendor/mycompany/myext
и классы расширения находятся в пространстве имён
myext
, то вы можете включить следующий код в конфигурацию вашего приложения:
[
'aliases' => [
'@myext' => '@vendor/mycompany/myext',
],
]
Вы можете захотеть создать расширение, когда чувствуете необходимость поделиться своим хорошим кодом с другими людьми. Расширение может содержать любой код, который вам нравится, например, класс-помощник, виджет, модуль и т.д.
Рекомендуется создавать расширение как пакет Composer, для того, чтобы его можно было легко установить и использовать, как описано в предыдущей главе.
Ниже приведены основные шаги, которым нужно следовать, чтобы создать пакет Composer.
composer.json
, в соответствии с требованиями Composer.
Вы можете обратиться к следующему разделу за более подробной информацией.composer.json
¶Каждый пакет Composer должен иметь файл composer.json
в своей корневой директории. Этот файл содержит метаданные о
пакете. Вы можете найти полную спецификацию по этому файлу в
Руководстве Composer. Следующий пример
демонстрирует файл composer.json
для расширения yiisoft/yii2-imagine
:
{
// название пакета
"name": "yiisoft/yii2-imagine",
// тип пакета
"type": "yii2-extension",
"description": "The Imagine integration for the Yii framework",
"keywords": ["yii2", "imagine", "image", "helper"],
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?labels=ext%3Aimagine",
"forum": "http://www.yiiframework.com/forum/",
"wiki": "http://www.yiiframework.com/wiki/",
"irc": "irc://irc.freenode.net/yii",
"source": "https://github.com/yiisoft/yii2"
},
"authors": [
{
"name": "Antonio Ramirez",
"email": "amigo.cobos@gmail.com"
}
],
// зависимости пакета
"require": {
"yiisoft/yii2": "~2.0.0",
"imagine/imagine": "v0.5.0"
},
// указание автозагрузчика классов
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
Каждый пакет Composer должен иметь название, которое однозначно идентифицирует пакет среди остальных. Название пакета
имеет формат имяРазработчика/названиеПроекта
. Например, в пакете yiisoft/yii2-imagine
, yiisoft
является именем
разработчика, а yii2-imagine
- названием пакета.
НЕ используйте yiisoft
в качестве имени разработчика, так как оно зарезервировано для использования в коде ядра Yii.
Мы рекомендуем использовать префикс yii2-
в названии проекта для пакетов, являющихся расширениями Yii 2, например,
моёИмя/yii2-mywidget
. Это позволит пользователям легче определить, что пакет является расширением Yii 2.
Важно указать тип пакета вашего расширения как yii2-extension
, чтобы пакет можно было распознать как расширение Yii во
время установки.
Когда пользователь запускает команду php composer.phar install
для установки расширения, файл
vendor/yiisoft/extensions.php
будет автоматически обновлён, чтобы включить информацию о новом расширении. Из этого
файла приложение Yii может узнать, какие расширения установлены (информацию можно получить с помощью
yii\base\Application::$extensions).
Ваше расширение зависит от Yii (естественно). Вы можете посмотреть список зависимостей в секции require
, входящей в
файл composer.json
. Если ваше расширение зависит от других расширений или сторонних библиотек, то вы также должны их
перечислить. Убедитесь, что в ограничениях вы указали соответствующую версию (например, 1.*
, @stable
) для каждой
зависимости. Используйте стабильные версии зависимостей, когда будет выпущена стабильная версия вашего расширения.
Для того, чтобы ваши классы были загружены автозагрузчиком классов Yii или автозагрузчиком классов Composer, вы должны
внести секцию autoload
в файл composer.json
, как показано ниже:
{
// ....
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
Вы можете перечислить один или несколько корневых пространств имён и соответствующие им пути.
Когда расширение установлено в приложение, Yii для каждого указанного корневого пространства имён создаст
псевдоним, который указывает на директорию, соответствующую пространству имён.
Например, указанная в секции autoload
запись будет соответствовать псевдониму @yii/imagine
.
Поскольку расширения предназначены для использования другими людьми, вам придётся приложить дополнительные усилия в процессе разработки. Ниже приведены некоторые общие и рекомендованные практики для создания высококачественных расширений.
Во избежание конфликтов имён, а также для того, чтобы ваши классы были автозагружаемыми, вы должны следовать стандарту PSR-4 или стандарту PSR-0 в использовании пространств имён и названии классов вашего расширения.
Пространства имён в ваших классах должны начинаться с имяРазработчика\названиеРасширения
, где названиеРасширения
совпадает с названием проекта в названии пакета, за исключением того, что оно не должно содержать префикса yii2-
.
Например, для расширения yiisoft/yii2-imagine
мы используем yii\imagine
в качестве пространства имён.
Не используйте yii
, yii2
или yiisoft
в качестве имени разработчика. Эти имена являются зарезервированными для
использования в коде ядра Yii.
Иногда вы можете захотеть выполнить некоторый код своего расширения в стадии
начальной загрузки приложения. Например, ваше расширение может ответить на событие
приложения beginRequest
, чтобы установить некоторые настройки окружения. Вы можете в инструкции по установке вашего
приложения написать, что необходимо назначить обработчик события beginRequest
, но лучшим способом будет сделать это
автоматически.
Для достижения этой цели вы можете создать так называемый класс начальной загрузки, реализовав интерфейс yii\base\BootstrapInterface. Например,
namespace myname\mywidget;
use yii\base\BootstrapInterface;
use yii\base\Application;
class MyBootstrapClass implements BootstrapInterface
{
public function bootstrap($app)
{
$app->on(Application::EVENT_BEFORE_REQUEST, function () {
// остальной код
});
}
}
Затем нужно добавить этот класс в файл composer.json
вашего расширения, как показано далее,
{
// ...
"extra": {
"bootstrap": "myname\\mywidget\\MyBootstrapClass"
}
}
Когда расширение будет установлено в приложение, Yii автоматически инициирует экземпляр класса начальной загрузки и вызовет его метод bootstrap() в процессе начальной загрузки каждого запроса.
Ваше расширение может иметь доступ к базам данных. Не думайте, что приложения, которые используют ваше расширение,
всегда используют Yii::$db
в качестве соединения с БД. Вместо этого вам следует объявить свойство db
в классах,
которым необходим доступ в БД. Это свойство позволит пользователям вашего расширения настроить соединение с БД,
которое они будут использовать в вашем расширении. В качестве примера вы можете обратиться к классу
yii\caching\DbCache и посмотреть, как он объявляет и использует свойство db
.
Если в вашем приложении необходимо создать определённые таблицы БД или сделать изменения в схеме БД, вы должны
Если ваше расширение является виджетом или модулем, то есть вероятность, что оно потребует некоторых ресурсов для работы. Например, модуль может отображать некоторые страницы, которые содержат изображения, JavaScript и CSS. Так как все файлы расширения находятся в директории, недоступной из интернета, у вас есть два варианта сделать директорию ресурсов непосредственно доступной из интернета:
Мы рекомендуем вам использовать второй подход, чтобы ваше расширение было более простым в использовании для других людей.
Ваше расширение может быть использовано в приложениях, поддерживающих разные языки! Поэтому, если ваше расширение отображает содержимое конечному пользователю, вы должны попробовать интернационализовать и локализовать его. В частности,
Yii::t()
так, чтобы они могли быть переведены. Сообщения, предназначенные для разработчиков (например,
внутренние сообщения исключений), не нужно переводить.Для более подробной информации вы можете обратиться к разделу Интернационализация
Вы хотите, чтобы ваше расширение было стабильным и не приносило проблем другим людям. Для достижения этой цели вы должны протестировать ваше расширение перед его публикацией.
Рекомендуется создавать различные тесты для покрытия кода вашего расширения, а не вручную тестировать его. Каждый раз перед тем, как выпустить новую версию расширения, вы можете просто запустить эти тесты чтобы убедиться, что всё работает правильно. Yii имеет поддержку тестирования, которая может помочь вам легче писать модульные, приёмочные и функциональные тесты. Для более подробной информации вы можете обратиться в раздел Тестирование.
Вы можете давать каждому выпуску вашего расширения номер версии (например, 1.0.1
). Мы рекомендуем вам придерживаться
практик семантического версионирования при определении, какой номер версии должен использоваться.
Чтобы позволить другим людям узнать о вашем расширении, необходимо опубликовать его.
Если это первый выпуск вашего расширения, вы должны зарегистрировать его в репозитории Composer, таком, как
Packagist. После этого вам остаётся только создать тег выпуска (например, v1.0.1
) в VCS
репозитории вашего расширения и уведомить репозиторий Composer о новом выпуске. Люди смогут найти новую версию и
установить или обновить расширение через репозиторий Composer.
В выпусках вашего расширения помимо файлов с кодом вы также должны рассмотреть вопрос о включении следующих файлов, которые помогут людям изучить и использовать ваше расширение:
readme.md
.changelog.md
.upgrade.md
.Информация: Ваши комментарии к коду могут быть написаны в формате Markdown. Расширение
yiisoft/yii2-apidoc
предоставляет инструмент для генерации документации API на основе ваших комментариев.
Информация: Пока это не обязательно, но мы всё-таки рекомендуем вам придерживаться определённого стиля кодирования. Вы можете обратиться к стилю кодирования фреймворка.
Yii предоставляет следующие базовые расширения, (или "Official Extensions") которые разрабатывает и поддерживает команда разработчиков Yii. Они все зарегистрированы на Packagist и могут быть легко установлены, как описано в подразделе Использование расширений.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.