ahmadasjad / yii1plushyii2
一个用于同时使用 yii1 和 Yii2 的库
Requires
- yiisoft/yii2: ^2.0
This package is auto-updated.
Last update: 2024-09-13 21:25:41 UTC
README
我们可以分两步实现这个功能
- 使用 Yii1 的基础控制器
- 使用 Yii2 的基础控制器
对于每一步,我都创建了两个仓库。我们将相应地使用它们
遵循的步骤
**: 必需的
*: 以某种方式必需的
(无星号): 可选的
-
使您的项目兼容 composer 并使用 yii1 作为 composer 依赖**
在自动加载器中添加类图,并将所有资源文件夹放入其值
composer dump-autoload
解决所有 类解析歧义 警告
-
使用 composer 安装我的两个仓库**
composer require ahmadasjad/yii1plushyii2 composer require ahmadasjad/yii2plusyii1
-
为 git 创建两个分支,一个为 yii1Controller,另一个为 yii2Controller
-
在 site/protected/config/
yii2
内创建一个 yii2 配置目录 * -
将
index.php
和Yii2Yii1.php
文件从ahmadasjad/yii2plusyii1
仓库复制到您的 site 目录或根据您的文件结构和配置自定义index.php
* -
创建一个自定义控制器并从
\ahmadasjad\yii1PlusYii2\Controller
扩展它**现在,在每个控制器中扩展您的自定义控制器。这将在未来使用来自 Yii2 的控制器时,帮助您仅更改基自定义控制器中的内容
-
替换视图类*
将其添加到您的 Yii2 配置中
'components' => [ 'view' => ['class' => \ahmadasjad\yii1PlusYii2\View::class], ],
-
在 yii1 中注册 Yii2 资产
在布局或视图文件中添加
Yii::$app->getView()->registerYii2Assets();
。这将创建在 yii1 中发布 Yii2 资产的中继桥。 -
在每次调用
render('yourView', ['model' => $model])
之前添加return
-
使您的控制器名称空间化 *: https://yiiframework.cn/doc/guide/1.1/en/basics.namespace#namespaced-controllers
-
在启动应用程序时在配置中添加以下功能
function() { //Set modelName converter for Yii1 models class in html form CHtml::setModelNameConverter(function ($model){ $className = get_class($model); $reflector = new ReflectionClass($className); return $reflector->getShortName(); }); }
现在您的配置应该看起来像这样
return [ ..., 'aliases' => [...], 'bootstrap' => [ ..., function() { //Set modelName converter for Yii1 models class in html form CHtml::setModelNameConverter(function ($model){ $className = get_class($model); $reflector = new ReflectionClass($className); return $reflector->getShortName(); }); }, ..., ], 'components' => [...], ... ];
技巧
- 删除 GII crud 生成的不必要代码,如视图中的
index.php
、_view.php
文件和控制器中的actionIndex()
方法
问题和解决方案
转换
- zii.widgets.jui.CJuiDatePicker -> yii\jui\DatePicker\DatePicker
- CStarRating -> \yii2mod\rating\StarRating
- zii.widgets.jui.CJuiAutoComplete -> \yii\jui\AutoComplete
- zii.widgets.CDetailView -> \yii\widgets\DetailView