Magento重载控制器

时间:2011-07-25 08:58:25

标签: class magento controller overloading router

我知道这个问题有很多例子,我想我读了所有这些,至少我觉得如此,有点困惑:-)我想首先我需要基本的conzept分别是一个更好的了解如何更改整个客户前端仪表板并使用其他方法扩展它的最佳方法。我对此感到困惑,也许这是错误的方式,也许不是,希望你能帮我找到正确的方法。

所有需要的文件都位于:

应用/代码/本地/公司/客户的/ etc / config.xml中

应用/代码/本地/公司/客户/控制器/ AccountController.php

应用/代码/本地/公司/客户/控制器/ IndexController.php

Atm我玩这些路径:

domain.com/customer /

覆盖:

<frontend>
    <routers>    
       <customer>
          <use>standard</use>
          <args>
             <module>Company_Customer</module>
             <frontName>customer</frontName>
          </args>
       </customer>
   </routers>
</frontend>

上面的代码工作正常,使用以下函数执行重载类:

function indexAction();

且路径: domain.com/customer / domain.com/customer/index / 正常运行。

到目前为止,这么好。但现在我还需要所有其他路径及其功能,例如 domain.com/customer/account / 路径,通常执行并路由到以下路径:

应用/代码/核心/法师/客户/控制器/ AccountController.php

这里有关键,是否可以通过执行加载AccountController或将其加载到 IndexController.php类,带有一个新方法,例如function accountAction();并停止Magento路由 到上面的核心路径?或者通过将magento路由器重写为我自己的模块来做到这一点更好:

应用/代码/本地/公司/客户/控制器/ AccountController.php

也许还有其他方法,但我的路由器无法正常工作:

<frontend>
   <routers>
      <customer_account>
      <use>standard</use>
      <args>
         <module>Company_Customer_Account</module>
         <frontName>customer_account</frontName>
      </args>
      </customer_account>
   </routers>
</frontend>

修改

这是来自error.log:

2011-07-25T10:36:46+00:00 ERR (3): Warning: include() [<a href='function.include'>function.include</a>]: Failed opening 'Mage/Customer/AccountController.php' for inclusion (include_path='/html/magento/app/code/local:/html/magento/app/code/community:/html/magento/app/code/core:/html/magento/lib:.:/usr/local/php/lib/php:/usr/local/php/lib/php/PEAR')  in /html/magento/lib/Varien/Autoload.php on line 93

我认为这意味着路由器正常工作,但找不到文件,对吧?!

任何建议都会很棒。谢谢!

--------------------------------------------

---------------- UPDATE ----------------

--------------------------------------------

感谢您的回复。我之前在全球部分尝试过替代重写:

<rewrite>
   <Company_Customer_Account>
      <from><![CDATA[#^/customer/account/#]]></from>
      <to>/customer/account/</to>
    </Company_Customer_Account>
</rewrite>

并使用您的代码:

<rewrite>
    <Company_Customer_Account>
      <from>/customer/account/index/</from>
      <to>/customer/account/index/</to>
   </Company_Customer_Account>
</rewrite>

两者都不起作用,我缺少什么?

这是AccountController.php

<?php

//require_once 'Mage/Customer/controllers/AccountController.php';

class Extension_Modul_AccountController extends Mage_Customer_AccountController {

    # Overloaded indexAction
    public function indexAction()
    {
        echo "executed";
        parent::indexAction();
    }
}

1 个答案:

答案 0 :(得分:1)

您的正面名称:'customer_account'需要与第二个示例中的'customer'相同。

当您执行domain.com/customer/时,它会自动引用IndexController - &gt;的indexAction();

为了获得domain.com/customer/account,它可以类似地完成,此处的帐户不是指AccountAction而是指AccountController。

路径系统通常​​如:Module / SomeController / someAction。

或者您可以添加配置全局标记,例如:

<rewrite><module_control_action><from>/module/control/action/</from><to>/mymodule/somecontrol/someaction/</to></module_control_action></rewrite>