重写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 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。