Yii2 - 将控制器扩展为现有模块
Posted
技术标签:
【中文标题】Yii2 - 将控制器扩展为现有模块【英文标题】:Yii2 - Extend a controller into an exist module 【发布时间】:2020-12-05 06:26:41 【问题描述】:我想将控制器从后端/控制器扩展到我现有的模块。 My Yii2 Application中的目录结构如下。
``
后端
控制器 JobOrderController 查看 工作订单模块
营销 控制器 JobOrderController [从@backend \ controllers \ JobOrderController 扩展]``
当我访问路由:localhost/marketing/job-order 时,我收到一条错误消息:
`` 未找到视图 - yii\base\ViewNotFoundException 视图文件不存在: ../../advanced/backend/modules/marketing/views/job-order/index.php
``
我不想更改营销模块的任何视图,可以吗?
【问题讨论】:
把模块的JobOrderController
中的$viewPath
设置成@backend/view/job-orders
怎么样?
但是如果您的目标是让外部控制器作为marketing
模块的一部分出现,那么将其设置在模块的$controllerMap
属性中可能会更好,因为这样您就不需要添加模块结构中的任何额外文件。
【参考方案1】:
只需在模块配置中使用 controllerMap。 还要设置视图文件夹。
public function init()
parent::init();
// custom initialization code goes here
$this->controllerMap = [
'job-order' => [
'class' => 'backend\components\controllers\JobOrderController',
'viewPath' => Yii::getAlias('@backend') . '/components/views/job-order'
]
];
【讨论】:
只是一个旁注。您可以在要添加模块的配置中设置模块的$controllerMap
属性。您无需重写模块类即可将其设置为init()
。以上是关于Yii2 - 将控制器扩展为现有模块的主要内容,如果未能解决你的问题,请参考以下文章