如何判断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
}
这样,当您在管理员检查逻辑中发现漏洞时,您可以在一个集中位置更正所有内容。
相关文章