diff --git a/docs/guide/extensions.md b/docs/guide/extensions.md index 47ba380..4f178ef 100644 --- a/docs/guide/extensions.md +++ b/docs/guide/extensions.md @@ -4,12 +4,15 @@ Extending Yii Code style ---------- -- Extension code style should be similar to [core framework code style](https://github.com/yiisoft/yii2/wiki/Core-framework-code-style). -- In case of using getter and setter for defining a property it's preferred to use method in extension code rather than property. -- All classes, methods and properties should be documented using phpdoc. Note that you can use markdown and link to properties and methods +- Extension code style SHOULD be similar to [core framework code style](https://github.com/yiisoft/yii2/wiki/Core-framework-code-style). +- All classes, methods and properties SHOULD be documented using phpdoc. Note that you can use markdown and link to properties and methods using the following syntax: e.g. `[[name()]]`, `[[name\space\MyClass::name()]]`. - If you're displaying errors to developers do not translate these (i.e. do not use `\Yii::t()`). Errors should be translated only if they're displayed to end users. +- Extension SHOULD NOT use class prefixes (i.e. `TbNavBar`, `EMyWidget`, etc.) +- Extension MUST provide a valid autoloading configuration in `composer.json`. Details can be found in the [composer documentation](http://getcomposer.org/doc/04-schema.md#autoload) or see all [official Yii2 extensions](https://github.com/yiisoft/yii2/tree/master/extensions/yii) for example. + + ### Namespace and package names @@ -19,24 +22,38 @@ using the following syntax: e.g. `[[name()]]`, `[[name\space\MyClass::name()]]`. - Extension MAY use a `yii2-` prefix in the composer vendor name (URL). - Extension MAY use a `yii2-` prefix in the repository name (URL). +### Dependencies + +- Additional code, eg. libraries, SHOULD be required in your `composer.json` file. +- When extension is released in a stable version, its requirements SHOULD NOT include `dev` packages that do not have a `stable` release. +- Use appropriate version constraints, eg. `1.*`, `@stable` for requirements. + +### Versioning + +- Extension SHOULD follow the rules of [semantic versioning](http://semver.org). +- Use a consistent format for your repository tags, as they are treated as version strings by composer, eg. `0.2.4`,`0.2.5`,`0.3.0`,`1.0.0`. + Distribution ------------ - There should be a `readme.md` file clearly describing what extension does in English, its requirements, how to install and use it. It should be written using markdown. If you want to provide translated readme, name it as `readme_ru.md` where `ru` is your language code. If extension provides a widget it is a good idea to include some screenshots. +- It is recommended to host your extensions at [Github](github.com). +- Extension MUST be registered at [Packagist](https://packagist.org). - TBD: composer.json -- It is recommended to host your extensions at github.com. Working with database --------------------- - If extension creates or modifies database schema always use Yii migrations instead of SQL files or custom scripts. +- Migrations SHOULD be DBMS agnostic. +- You MUST NOT make use of active-record model classes in your migrations. Assets ------ -TBD +- Asset files MUST be registered through Bundles. Events ------ @@ -46,9 +63,16 @@ TBD i18n ---- -TBD +- Extension SHOULD provide at least one message catalogue with either source or target language in English. +- Extension MAY provide a configuration for creating message catalogues. + +Authorization +------------- + +- Auth-items for controllers SHOULD be named after the following format `vendor\ext\controller\action`. +- Auth-items names may be shortened using an asterisk, eg. `vendor\ext\*` Testing your extension ---------------------- -TBD \ No newline at end of file +- Extension SHOULD be testable with *PHPUnit*. \ No newline at end of file