怎么在模块下新增一个Controller或一个block

问题咨询 · ggjd · 于 5年前 发布 · 1993 次阅读

您好,请问我不重写模块下的block,想新增一个,好像没看到这方面的介绍,请问怎么新增呢?

共收到 6 条回复
ggjd#25年前 0 个赞

我不是新建一个模块,只是在原来已经存在的模块二次开发,在原来的模块下新增一个Controller或一个block,并不想重写整个模块,看到的都是介绍怎么重写原来模块的东西,没看到在原来的模块下新建东西在哪配置?麻烦帮忙看一下,谢谢!

Fecmall#35年前 0 个赞

1.重写有很多种,可以重写整个模块,也可以只重写某个文件,譬如controller block 重写

2.新附加的功能,做一个新模块即可

3.上面的文档,给予的是一个方式和思路,而且文档给的很全,玩fecshop要有自己的能力, 举一反三,自己去梳理代码和文档,本人能给的就这么多。

qwerttyui#45年前 0 个赞

@ggjd #2楼 原有模块下新增一个controller,先去此模块的配置文件中使用controllerMap进行指向新增的控制器,顺道继承。但我发现已有模块新增block(不是重写),必须要重写Module,得到新的命名空间,不然找不到新的block,但重写了Module话,原有block就找不到了,也必须复制重写,这就很有点麻烦啊。。。

Fecmall#55年前 0 个赞

不需要的,在controller继承的基类:https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/modules/AppfrontController.php

    public $blockNamespace;

    /**
     * @param $blockName | String
     * get current block
     * 这个函数的controller中得到block文件,譬如:
     * cms模块的ArticleController的actinIndex()方法中使用$this->getBlock()->getLastData()方法,
     * 对应的是cms/block/article/Index.php里面的getLastData(),
     * 也就是说,这个block文件路径和controller的路径有一定的对应关系
     * 这个思想来自于magento的block。
     */
    public function getBlock($blockName = '')
    {
        if (!$blockName) {
            $blockName = $this->action->id;
        }
        if (!$this->blockNamespace) {
            $this->blockNamespace = Yii::$app->controller->module->blockNamespace;
        }
        if (!$this->blockNamespace) {
            throw new \yii\web\HttpException(406, 'blockNamespace is empty , you should config it in module->blockNamespace or controller blockNamespace ');
        }
        $viewId = $this->id;
        $viewId = str_replace('/', '\\', $viewId);
        $relativeFile = '\\'.$this->blockNamespace;
        $relativeFile .= '\\'.$viewId.'\\'.ucfirst($blockName);
        //查找是否在rewriteMap中存在重写
        $relativeFile = Yii::mapGetName($relativeFile);
        
        return new $relativeFile();
    }

可以看到类变量blockNamespace,这个就是用来设置查找block文件的,如果不填写,那么默认使用的是当前modules的文件路径,您可以设置这个类变量的值。

譬如:

public $blockNamespace = 'fbbcbase\\app\\appadmin\\modules\\Sales\\block';

然后再这个namespaces对应的文件路径中添加block即可

qwerttyui#65年前 0 个赞

@Fecshop #5楼 谢谢,明白了。

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