如何判断Magento请求是针对前端页面还是针对后端页面?

2022-02-21 00:00:00 php magento

如何判断当前请求是针对后端页面还是针对前端页面?此检查将在观察器内部完成,因此如果有帮助,我确实有权访问请求对象。

我考虑过检查Mage::getSingleton('admin/session')->getUser(),但我认为这不是一个非常可靠的方法。我希望有更好的解决方案。


解决方案

这是没有好答案的领域之一。Magento本身并不为此信息提供显式的方法/API,因此对于任何解决方案,您都需要检查环境并进行推断。

我正在使用

Mage::app()->getStore()->isAdmin()

过一段时间,但事实证明有些管理页面(Magento Connect包管理器)并不是这样。由于某种原因,此页将存储ID显式设置为1,这使得isAdmin返回为false。

#File: app/code/core/Mage/Connect/controllers/Adminhtml/Extension/CustomController.php
public function indexAction()
{
    $this->_title($this->__('System'))
         ->_title($this->__('Magento Connect'))
         ->_title($this->__('Package Extensions'));

    Mage::app()->getStore()->setStoreId(1);
    $this->_forward('edit');
}

可能有其他页面具有此行为,

另一个好办法是检查设计包的"Area"属性。

对于管理中的页面,这似乎不太可能被覆盖,因为该区域会影响管理区域设计模板和布局XML文件的路径。

无论您选择从环境中推断什么,都要创建新的Magento模块,并向其中添加帮助器类

class Namespace_Modulename_Helper_Isadmin extends Mage_Core_Helper_Abstract
{
    public function isAdmin()
    {
        if(Mage::app()->getStore()->isAdmin())
        {
            return true;
        }

        if(Mage::getDesign()->getArea() == 'adminhtml')
        {
            return true;
        }

        return false;
    }
}

然后,当您需要检查您是否在管理员中时,请使用此帮助器

if( Mage::helper('modulename/isadmin')->isAdmin() )
{
    //do the thing about the admin thing
}

这样,当您在管理员检查逻辑中发现漏洞时,您可以在一个集中位置更正所有内容。

相关文章