Magento,如何覆盖本地代码池中的社区控制器

时间:2016-03-01 13:52:57

标签: php magento controller override extend

我想从社区覆盖AW Blog BlogController到我的local_MyCompany文件夹来修改saveAction方法。有人可以帮帮我吗。

以下是社区控制器类的路径:

app\code\community\AW\Blog\controllers\Manage\BlogController.php

这是我的local_Business路径:

require_once 'AW/Blog/controllers/Manage/BlogController.php';

class MyCompany_MyAwBlog_Manage_BlogController extends AW_Blog_Manage_BlogController
{
    public function editAction()
    {
        echo 'hello'; die();
    }

}

这是我的config.xml文件内容:

<config>
<modules>
    <MyCompany_MyAwBlog>
        <version>0.1.0</version>
    </MyCompany_MyAwBlog>
</modules>
<frontend>
    <routers>
        <myawblog>
            <use>standard</use>
            <args>
                <module>MyCompany_MyAwBlog</module>
                <frontName>myawblog</frontName>
            </args>
        </myawblog>
    </routers>
</frontend>
<global>
    <rewrite>        
        <mycompany_myawblog_blog_manage_blogcontroller>
            <from><![CDATA[#^/blog/manage_blog/#]]></from>
            <to>/myawblog/blog_manage_blog/</to>
        </mycompany_myawblog_blog_manage_blogcontroller>
    </rewrite>
</global>
<admin>
    <routers>
        <myawblog>
            <use>admin</use>
            <args>
                <module>MyCompany_MyAwBlog</module>
                <frontName>admin_myawblog</frontName>
            </args>
        </myawblog>
    </routers>
</admin>

2 个答案:

答案 0 :(得分:1)

试试这个

1)控制器文件

@emSize : 16px;
@pxr    : 1 / unit(@emSize, rem);

.paddingver(@paddingver) {
       padding-top: @paddingver * @pxr; 
       padding-bottom: @paddingver * @pxr;
}
.paddinghor(@paddinghor) {
       padding-left: @paddinghor * @pxr;
       padding-right: @paddinghor * @pxr;
}

.test {
       .paddingver(10px);
       .paddinghor(25px);
}

2)Config.xml

require_once 'AW/Blog/controllers/Manage/BlogController.php';

class MyCompany_MyAwBlog_Manage_BlogController extends AW_Blog_Manage_BlogController
{
    public function editAction()
    {
        echo 'hello'; die();
    }

}

管理员控制器的更新:

尝试以下操作 -

1)控制器文件

<frontend>
    <routers>
        <myawblog>
            <use>standard</use>
            <args>
                <modules>
                    <MyCompany_MyAwBlog before="AW_Blog">MyCompany_MyAwBlog</MyCompany_MyAwBlog>
                </modules>
            </args>
        </myawblog>
    </routers>
</frontend> 

2)config.xml

<?php
require_once 'AW/Blog/controllers/Manage/BlogController.php';

class MyCompany_MyAwBlog_Manage_BlogController extends AW_Blog_Manage_BlogController
{
    public function editAction()
    {
        echo 'Hi'; 
        die();
    }
}

注意:

1)<admin> <routers> <adminhtml> <args> <modules> <myawblog before="AW_Blog">MyCompany_MyAwBlog_Adminhtml</myawblog> </modules> </args> </adminhtml> </routers> </admin>

上面提到的控制器路径应该是正确的管理控制器路径。对于extends关键字之后的路径的第二个点相同。

2)require_once 'AW/Blog/controllers/Manage/BlogController.php';

参考网址 SUPEE-6788 TECHNICAL DETAILS

答案 1 :(得分:0)

Muk提供的初始答案对我不起作用(前端控制器覆盖)。

但是,在从to更换节点后,它可以正常工作。

因为是重写的路线。但这里的目标是捕捉基本路线,意味着。

所以对我有用的最终config.xml anwser是:

<frontend>
<routers>
    <awblog>
        <use>standard</use>
        <args>
            <modules>
                <MyCompany_MyAwBlog before="AW_Blog">MyCompany_MyAwBlog</MyCompany_MyAwBlog>
            </modules>
        </args>
    </awblog>
</routers>