如何覆盖yii2中的Controller,Model,Views

时间:2015-12-22 08:48:39

标签: yii2

如何覆盖主题配置中的类模块?我试过这么不可能。

return [
   ...
   'modules' => [
       'shop' => [
        'class' => 'app\modules\shop\ShopModule',
           'components' => [
               'manager' => [
                   'class' => 'app\web\theme\modules\shop\Customer',
               ],
           ],
    ],
...
  ],

];

1 个答案:

答案 0 :(得分:2)

覆盖控制器

有时您可能需要覆盖默认的Yii2用户控制器。这很简单,需要两个步骤。 第1步:创建新控制器

首先,您需要在自己的命名空间下创建新控制器(我们推荐app \ controllers \ user)并从所需的Yii2用户控制器扩展它。

例如,如果要覆盖AdminController,则应create app\controllers\user\AdminController并对其进行扩展from dektrium\user\controllers\AdminController:

<?php

namespace app\controllers\user;

use dektrium\user\controllers\AdminController as BaseAdminController;

class AdminController extends BaseAdminController
{
    public function actionCreate()
    {
        // do your magic
    }
}

步骤2:将控制器添加到控制器地图

要让Yii2用户了解您的控制器,您应该将其添加到控制器地图中,如下所示:

<?php return [
    ...
    'modules' => [
        ...
        'user' => [
            'class' => 'dektrium\user\Module',
            'controllerMap' => [
                'admin' => 'app\controllers\user\AdminController'
            ],
            ...
        ],
        ...
    ],

覆盖视图click here