我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多存储功能)。
我想知道,是否有可能在Magento前端执行adminhtml控制器的功能?
此时,我只需创建文件夹和编辑index.php, .htaccess
时,点击保存网站在Magento后端。我需要更多,请帮帮忙。
任何帮助都将不胜感激。谢谢!
发布于 2015-02-05 00:48:04
我不认为这是个好主意--允许创建自己的商店的人应该有一个管理帐户(您知道可以用受限的权限定义角色吗?)
但要回答这个问题:这是可能的。您必须创建一个模拟登录管理用户的前端控制器,然后转发到adminhtml控制器操作。
示例(未经测试):
public function saveStoreAction()
{
$adminUser = Mage::getModel('admin/user')->load(ADMIN_USER_ID);
$adminSession = Mage::getSingleton('admin/session');
$adminSession->setUser($adminUser);
$adminSession->setIsFirstPageAfterLogin(false);
$this->_forward('save', 'store', 'adminhtml');
}
ADMIN_USER_ID
是要执行该操作的后端用户的id。这不应该是您自己的具有完全权限的管理帐户,而应该是一个只有必要权限的虚拟帐户,或者一个针对每个用户的真实帐户。
关于_forward():
该方法是在Mage_Core_Controller_Varien_Action
中定义的,如下所示:
/**
* Throw control to different action (control and module if was specified).
*
* @param string $action
* @param string|null $controller
* @param string|null $module
* @param array|null $params
*/
它操作当前请求对象并将其设置为“未分派”,因此前端控制器将再次尝试寻找合适的动作控制器将其分派给它,这一次根据新的参数。
实际上,我的第一个版本有一个错误,_forward不采用像'adminhtml/store/save'
这样的路径作为参数,而是采用相反顺序的独立部分,'save', 'store', 'adminhtml'
。
https://stackoverflow.com/questions/28336058
复制