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 - 将控制器扩展为现有模块的主要内容,如果未能解决你的问题,请参考以下文章

将 ES6 插件扩展为 jQuery 原型

将 _In_ 扩展为 const

Yii2 JWT

pyspark RDD 将一行扩展为多行

更改将 HTML 标记名称扩展为元素的键

Groovy 将元组/映射扩展为参数