如何判断Magento请求是针对前端页面还是后端页面?
如何判断当前请求是针对后端页面还是前端页面?此检查将在观察器内部完成,因此如果有帮助,我确实可以访问请求对象。
我考虑过检查,但我不认为这是一个非常可靠的方法。我希望有一个更好的解决方案。Mage::getSingleton('admin/session')->getUser()
如何判断当前请求是针对后端页面还是前端页面?此检查将在观察器内部完成,因此如果有帮助,我确实可以访问请求对象。
我考虑过检查,但我不认为这是一个非常可靠的方法。我希望有一个更好的解决方案。Mage::getSingleton('admin/session')->getUser()
这是没有好答案的领域之一。Magento本身没有为这些信息提供显式的方法/API,因此对于任何解决方案,您都需要检查环境并推断事物。
我正在使用
Mage::app()->getStore()->isAdmin()
有一段时间,但事实证明,某些管理页面(Magento Connect Package管理器)并非如此。由于某种原因,此页面显式将存储 ID 设置为 1,这使得返回为 false。isAdmin
#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');
}
可能还有其他页面具有此行为,
另一个好的选择是检查设计包的“面积”属性。
对于管理员中的页面,这似乎不太可能被覆盖,因为该区域会影响管理区域设计模板和布局 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
}
这样,当您/如果发现管理员检查逻辑中的漏洞时,您可以在一个集中的位置更正所有内容。
如果您能够使用观察者,则可以将其限制为“adminhtml”事件区域。
<config>
...
<adminhtml>
<events>
<core_block_abstract_prepare_layout_after>
<observers>
<mynamespace_mymodule_html_before>
<type>singleton</type>
<class>mynamespace_mymodule/observer</class>
<method>adminPrepareLayoutBefore</method>
</mynamespace_mymodule_html_before>
</observers>
</core_block_abstract_prepare_layout_after>
</events>
</adminhtml>
</config>