重写Fecshop的Controller的完整实例

技术分享 · ycjnx · 于 5年前 发布 · 2665 次阅读

重写Fecshop的Controller的意义有两个:

1、修改Fecshop的控制器中的原有动作方法(action)。

2、为Fecshop控制器增加新的动作方法。

以下是重写Fecshop的Controller实操步骤:

重新定义'catalog'模块的控制器指向,将'category'控制器指向本地的CategoryController,从而>实现控制器的继承和扩展:

[webadmin@centos7 doc] #2> vim /mywork/eltmall/appfront/config/fecshop_local_modules/Catalog.php 
return [
    'catalog' => [
        'controllerMap' => [                                                              
           'category' => 'appfront\local\local_modules\Catalog\controllers\CategoryController',        
        ],
......
......
[webadmin@centos7 doc] #2>

Fecshop的CategoryController控制器:

[webadmin@centos7 doc] #2> vim /mywork/eltmall/vendor/fancyecommerce/fecshop/app/appfront/modules/Catalog/controllers/CategoryController.php
namespace fecshop\app\appfront\modules\Catalog\controllers;
use fecshop\app\appfront\modules\AppfrontController;
use Yii;
class CategoryController extends AppfrontController
{
......
......
    public function actionIndex()                                                         
    {
        echo "OK";exit;//此行调试代码,用完注释掉
        $data = $this->getBlock()->getLastData();
        if(is_array($data)){
            return $this->render($this->action->id, $data);
        }
    }
......
......
[webadmin@centos7 doc] #2>

本地的CategoryController控制器继承自Fecshop的控制器,并扩展了一个新方法actionTest()

[webadmin@centos7 doc] #2> vim /mywork/eltmall/appfront/local/local_modules/Catalog/controllers/CategoryController.php
<?php
namespace appfront\local\local_modules\Catalog\controllers;
use fecshop\app\appfront\modules\AppfrontController;
use Yii;
class CategoryController extends \fecshop\app\appfront\modules\Catalog\controllers\CategoryController
{
    //1、修改Fecshop的控制器中的原有动作方法(action)。将此action的注释去掉,访问:http://www.emall.com/catalog/category/ 即可看出方法覆盖的效果。
    /*
    public function actionIndex(){
        echo "TestIndex";exit;                                                            
    }
    */
    //2、为Fecshop控制器增加新的动作方法。
    public function actionTest(){
        echo "OKK33";exit();
    }
}
[webadmin@centos7 doc] #2>

运行测试:

调用新定义的本地控制器的新方法Test()

http://www.emall.com/catalog/category/test
/*
OKK33
 * */

仍然可以调用原控制器的默认方法Index()

http://www.emall.com/catalog/category/
/*
OK
 * */

(全文完)

本文由 ycjnx 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 1 条回复
Fecmall#15年前 0 个赞

赞一个,:thumbsup: :thumbsup:

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics