控制器映射导致 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 控制台应用程序出错的主要内容,如果未能解决你的问题,请参考以下文章