【问题标题】:Yii2 - Extend a controller into an exist moduleYii2 - 将控制器扩展为现有模块
【发布时间】: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 属性中可能会更好,因为这样您就不需要添加模块结构中的任何额外文件。

标签: yii2


【解决方案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()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2021-05-15
  • 2011-08-19
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
相关资源
最近更新 更多