Yii2高级模板使用来自控制台前端的模型

时间:2018-02-18 05:15:32

标签: php yii2 yii2-advanced-app

我在前端有很多模型。其中一些具有需要批量运行的功能。对于这个控制台很好。

我可以通过复制代码来包含模型,但这不是一个好的方法。

我正在寻找一种方法从控制台命令中的前端子模块导入模型,这样我就可以在一个地方进行更改。

澄清, 包括

的标准方式

use app\models\Mymodelname;

控制台\模型中的

导致以下错误

  

'类'app \ models \ Mymodelname'找不到'

3 个答案:

答案 0 :(得分:2)

{
    "plugins": [
        "transform-object-rest-spread",
        "syntax-jsx",
        "transform-react-jsx",
        "transform-react-display-name",
        "transform-class-properties",
        "transform-function-bind",
        "transform-decorators-legacy"
    ],
    "compact": false,
    "env": {
        "development": {
            "plugins": [
                "transform-react-jsx-self",
                "transform-react-jsx-source",
                [
                    "styled-components",
                    {
                        "displayName": true,
                        "minify": false
                    }
                ]
                // https://stackoverflow.com/q/48857689/65387
                //"react-hot-loader/babel"
            ],
            "presets": [
                [
                    "env",
                    {
                        "targets": {
                            "browsers": "last 2 chrome versions"
                        },
                        "modules": false
                    }
                ]
            ],
        },
        "webpack": {
            "presets": [
                [
                    "env",
                    {
                        "targets": {
                            "node": "current"
                        },
                        "modules": "commonjs"
                    }
                ]
            ]
        }
    }
}

以前没有使用过此包含声明。我更喜欢使用前端/后端。如果我不得不疯狂猜测,这会在控制台中寻找模型。 @app是当前应用程序的别名。

通常情况下,我会保留多于1个应用程序使用的任何内容。正如您所指出的,维护相同代码的两个副本并不是一个好习惯。

如果移动到common不是一个选项,请尝试直接使用use app\models\Mymodelname;

答案 1 :(得分:1)

我不知道你是否有两个独立的应用程序,或者可以从中受益,因为你已经在使用子模块了,但是根据你想用一些控制台命令来区分问题,这可能是有利的。

如果您使用composer来管理依赖项,那么您可以在git中创建一个单独的存储库,例如,在项目中添加一个包含这些常见模型的新依赖项。

然后,在两个项目中包含您的依赖项。这在开发过程中引入了一些麻烦,因为这两个应用程序共享这种依赖性并且有时令人沮丧;我以这种方式在多个间隔laravel项目之间共享了共同的功能,并取得了巨大的成功。

目前您似乎正在使用子模块,因此这可能需要重组,这可能很难或不可能。

如果要保留子模块,另一个选项是将常用模型保持在更高级别(不在子模块内),以便可以将模型导入两个子模块并在两个位置使用它们。几年来,我使用这种策略在yii 1.1.16模块之间共享了通用模型并取得了很大的成功。

两种选择都有其优点,因此请仔细权衡您期望的结果。随意要求澄清。

How to add private github repository as Composer dependency

答案 2 :(得分:0)

@app是当前正在运行的应用程序的别名。它可以是frontendbackendconsole。如果要跨应用程序访问模型,请将其添加到commen\models。或者将app\models更改为frontend\models。这样,您就可以在控制台上访问frontend个模型。更好的方法是将其移至common\models