asbsoft / yii2-common_2_170212
为ASB项目提供的实验性Yii2通用扩展
Requires
- php: >=5.4.0
- mihaildev/yii2-ckeditor: *
- mihaildev/yii2-elfinder: *
- npm-asset/world-flags-sprite: *
- yiisoft/yii2: ~2.0.10
- yiisoft/yii2-imagine: 2.*
- yiisoft/yii2-jui: ~2.0.4
README
我喜欢Yii2框架,但我想在这个框架中拥有更多用于构建独立、可重用和可继承模块的工具。
以下是一些由“联合模块”提供的实验性扩展,供我的项目使用。
Yii2有两个应用程序模板 - 基本和高级。为了满足这两种需求,需要更复杂的配置,而在Yii2中配置太多。
注意
-
将composer.json中“require”部分定义的所有依赖项添加到系统中。
-
在此处使用autoload.php进行额外的自动加载注册。
-
通过composer或手动定义别名(例如:Yii::setAlias('@asb/yii2/common_2_170212', '@vendor/asbsoft/yii2-common_2_170212');)在系统中注册命名空间\asb\yii2\common_2_170212。此定义可以放置在index.php中,最常用的配置或更好的方式是在@vendor/yiisoft/extensions.php中,以便在任何基本/前端/后端/控制台应用程序中提供工作。
-
在config文件夹中创建自己的配置文件。使用*.EXAMPLES.php文件作为示例。
-
运行迁移。
-
要使用附加功能,需要从\asb\yii2\common_2_170212\base\UniModule扩展模块,从\asb\yii2\common_2_170212\controllers\BaseController和BaseAdminController扩展控制器,从asb\yii2\common_2_170212\models\DataModel扩展活动记录模型。此外,将应用程序配置中的'components' => [ //... 'view' => [ 'class' => 'asb\yii2\common_2_170212\web\UniView', ], // 用于处理视图继承此操作提供模块继承机制:配置和消息将合并,视图和操作将从最新的子类获取。
-
扩展还包括一些功能,用于切换由asb\yii2\common_2_170212\i18n\LangHelper提供的多语言支持,以及由asb\yii2\common_2_170212\base\CommonBootstrap引导。
使用模块继承
-
从base\UniModule扩展您的祖先模块。您可以在祖先模块类的根目录中创建另一个模块,然后将其作为子模块添加到应用程序或另一个模块容器的配置中。
-
现在工作如下
- 配置和参数将与祖先的数据合并
- 消息将合并
- 对于路由(s),获取最新的文件(s)
- 对于视图(s),获取最新的文件(s) - 可能仅重定义所需的文件(s)
- 控制器和模型 - 传统继承
- 要使用模型继承,您必须在模块的config/config.php中(重新)定义使用模型,格式为alias => class name或object array:'models' => [..., 'ALIAS' => 'VENDOR\yii2\modules\MODULE_NAME\models\News', ...],例如'News' => 'asb\yii2\modules\news_1\models\News'(在模块祖先中)'News' => 'asb\yii2\modules\news_2\models\News'(在模块子代中),并且为了访问模型,您必须在每个地方使用(仅适用于扩展UniModule的模块中的模型)
- $module->getDataModel($alias, $params = [], $config = []) // 获取并初始化模块对象或相同的静态方法:ModuleClassName::model($alias, $params = [], $config = [])
- 要使用资产继承,您必须在模块的config/config.php中(重新)定义使用资产,格式为alias => class name:'models' => [..., 'ALIAS' => 'CLASSNAME', ...],在视图中使用$assets = $this->context->module->registerAsset('MyAsset', $this);而不是$assets = MyAsset::register($this);,在新的资产中最好使用旧资产作为'depends'而不是子级 - 新的CSS文件将在之后包含并重定义旧样式