控制器映射导致 yii2 控制台应用程序出错

Posted

技术标签:

【中文标题】控制器映射导致 yii2 控制台应用程序出错【英文标题】:Controller mapping causing error in yii2 console application 【发布时间】:2015-11-16 12:39:17 【问题描述】:

模块部分配置

'user'  => [
            'class' => 'dektrium\user\Module',
            'modelMap' => [
                'User' => 'app\models\DL\User',
                'registrationForm' => 'app\models\DL\registrationForm',
            ],
            'controllerMap' => [
                /*'registration' =>    'app\controllers\user\RegistrationController',
                'admin' => 'app\controllers\user\AdminController'*/
            ],
            'layout'       => '@app/views/layouts/container',
            'defaultRoute' => 'profile',
            'admins'       => ['admin'],
            'enableFlashMessages' => false,
            'params' => [
                'menuItems'      => [
                    'label' => 'Users',
                    'url'   => ['/user/admin']
                ]
            ]
        ],

Yii 控制台应用程序 (./yii) 显示错误

'调用未知方法: app\controllers\user\AdminController::getHelpSummary()'

如果我取消注释 controllerMap 部分,如果我的 AdminController 扩展 Web 控制器而不是控制台,我无法理解为什么它会在控制台应用程序中自动加载。

这是来自用户模块的命令。

【问题讨论】:

【参考方案1】:

你真的需要控制台中的用户模块吗?

默认情况下,Yii2 控制台和 Web 应用程序具有分离的配置文件。如果您更改了此默认设置并为它们使用相同的配置,则必须注意一致性。

您可以在./yii 中查看已加载的配置列表。

【讨论】:

我正在使用 yii2 的 phundament 模板。 github.com/phundament/app/blob/4.0.0-rc8/src/config/main.php。问题是我无法使用 ./yii。它立即崩溃。 您可以通过在$console config 中添加覆盖来删除user 模块 是的,已经试过了。我添加了带有问题命令的屏幕。如果我从控制台部分覆盖这个模块,这个命令也会消失。 那么您需要实现控制台应用程序所需的方法,以使其工作 也想了想,也试过了,结果远不止一对方法。我想知道为什么从供应商文件夹中使用相同的控制器时没有错误。供应商类也不包含这些方法。【参考方案2】:

您需要为控制台应用程序指定一个有效的defaultRoute

对于'defaultRoute' => 'profile'./yii 可能会尝试加载需要user 模块的Controller

尝试将其添加到console configuration。

【讨论】:

我的控制台部分看起来与您提供的链接中的相同。我正在使用 Phundament 应用程序。还是我误会了什么? 如果它完全相同并且您在$common 中的defaultController 设置为profile 它也适用于控制台。尝试将defaultController 移动到$web 刚试过。一样的效果。唯一对我有帮助的是将所有 controllerMap 部分移动到 Web 部件。

以上是关于控制器映射导致 yii2 控制台应用程序出错的主要内容,如果未能解决你的问题,请参考以下文章

yii2 入口脚本

Yii2 Kartik Select2 Ajax 控制器 - 结果未显示

yii2 控制器的生命周期

代码运行,但报告我正在发布版本中调试

yii2 basic VER

yii2源码学习笔记