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

Yii2 Advanced Template use model from frontend in console

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

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

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

澄清一下, 包括

的标准方式

use app\models\Mymodelname;

在console\model中导致以下错误

'Class 'app\models\Mymodelname' not found'

我不知道您是否有两个单独的应用程序,或者是否可以从中受益,因为您已经在使用子模块,但根据您希望将关注点与某些控制台命令分开,这可能是有利的。

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

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

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

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

两种选择各有优势,因此请仔细权衡您想要的结果。随时要求澄清。

use app\models\Mymodelname;

以前没有使用过这个包含语句。我更喜欢按原样使用 frontend/backend 。不过,如果我不得不大胆猜测的话,这会在控制台中查找模型。 @app 是当前应用的别名。

通常,我将超过 1 个应用程序使用的所有内容都保留在通用下。正如您所指出的,维护相同代码的两个副本不是一个好习惯。

如果不能转为通用,请尝试直接使用 frontend\models\Mymodelname

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