ahmadasjad / yii1plushyii2

该包最新版本(dev-master)没有提供许可证信息。

一个用于同时使用 yii1 和 Yii2 的库

dev-master 2021-07-13 14:37 UTC

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.phpYii2Yii1.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() 方法

问题和解决方案

转换

在开发过程中帮助的链接