/ yii2

yii2-extension

extentions 表示 yii2 专属的 packages,相对于可以在 yii 之外使用的通用 packages 而言。

比如 yiisoft/yii2-debug 就是一个 yii2 专属的 extension,它只能在 yii2 中使用。

Core Extension

  • yiisoft/yii2-apidoc
  • yiisoft/yii2-authclient
  • yiisoft/yii2-bootstrap
  • yiisoft/yii2-codeception
  • yiisoft/yii2-debug
  • yiisoft/yii2-elasticsearch
  • yiisoft/yii2-facker
  • yiisoft/yii2-gii
  • yiisoft/yii2-httpclient
  • yiisoft/yii2-imageine
  • yiisoft/yii2-jui
  • yiisoft/yii2-mongodb
  • yiisoft/yii2-redis
  • yiisoft/yii2-smarty
  • yiisoft/yii2-sphinx
  • yiisoft/yii2-swiftmailer
  • yiisoft/yii2-twig

创建 extensions

使用 composer init 创建一个 composer.json

{
    //package type
    "type": "yii2-extension",

    // package dependencies
    "require": {
        "yiisoft/yii2": "~2.0.0",
        "imagine/imagine": "v0.5.0"
    },
    
    // class autoloading spec
    "autoload": {
        "psr-4": {
            "yii\\imageine\\": "src"
         }
     }
 }

Bootstrapping Classes

如果你的 extension 需要在应用的 bootstrapping 处理阶段运行一些代码。例如,你的 extension 需要在应用的 beginRequest 事件上调整环境设置。

namespace myname\mywidget;

use yii\base\BootstrapInterface;
use yii\base\Application;

class MyBootstrapClass implements BootrapInterface
{
    public function bootstrap($app)
    {
        $app->on(Application::EVENT_BEFORE_REQUEST, function(){
         // do something here
        });
    }
}

然后将该类加入到 composer.json 中:

{
 //...

    "extra": {
         "bootstrap": "myname\mywidget\MyBootstrapClass"
    }
}

Working with Database

如果你的 extension 需要使用数据库,需要注意的是,不能假设每个使用你 extension 的 application 都使用 Yii::$app->db。相反,你应该声明一个 db 属性。

Using Assets

如果你的 extension 是一个 widget 或者 module,它们可能会用到 assets。因为这些资源文件在我们的 extension 文件夹内,所以需要我们声明一个 asset bundle 并通过 asset publishing 机制来把 asset bundle 中列出的文件 copy 到 Web-accessible 文件夹内。

Testing

Versioning

Releasing

简单地创建一个 release tag,例如 v1.0.0。首次发布比较麻烦点。