2015-02-10 109 views
0

我为我的Magento模块的一部分编写了一个模型,用于检查用户是否已登录。它旨在防止未登录的用户访问某些页面。它有效,但我有兴趣学习Magento最佳实践并编写更高效的代码。在这个模型中,我需要检查用户是否登录。这给了我两个选择。我可以在代码中调用法师助手,也可以扩展Mage_Customer_Helper_Data类并询问$this->isLoggedIn()。哪个效率最高?有没有更好的办法?我将粘贴下面的两个版本。Magento - 调用辅助函数或扩展辅助类更有效吗?

延长帮手

class Company_Module_Model_Protection extends Mage_Customer_Helper_Data 
{ 
    public function checkUser() 
    { 
     if (!$this->isLoggedIn()) 
     { 
      Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account/login/referer/'.base64_encode(Mage::helper('core/url')->getCurrentUrl()).'/')); 
     } 
     return true; 
    } 
} 

调用辅助

class Company_Module_Model_Protection 
{ 
    public function checkUser() 
    { 
     if (!Mage::helper('customer')->isLoggedIn()) 
     { 
      Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account/login/referer/'.base64_encode(Mage::helper('core/url')->getCurrentUrl()).'/')); 
     } 
     return true; 
    } 
} 

回答

1

两者都是完全可以接受的,一个将有帮手实例另一个帮手,让你可以有一点点在调用核心帮手方面获得延期。

但是,看到并确定它的最好方法是对它进行基准测试,Magento探查器是实现该任务的最好的朋友。

现在说,如果你想有一个非常清晰的模块,你现在必须改变你的模块定义(在app/etc/modules/),清楚地表明你自己的模块需要Mage_Customer才能正常工作。

所以/app/etc/modules/Company_Module.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Company_Module> 
      <active>true</active> 
      <codePool>local</codePool> 
      <depends> 
       <Mage_Customer/> 
      </depends> 
     </Company_Module> 
    </modules> 
</config> 

这样一来,如果有人安装模块与Magento的上Mage_Customer被禁止,他会看到一个明确的警告,客户模块已被激活。你可以肯定的是你的extends,呼叫核心帮手或getUrl客户模块控制器应该永远不会失败。

+0

我喜欢它,非常感谢你的提示! – Markie 2015-02-10 11:06:36