【发布时间】:2015-02-05 04:09:24
【问题描述】:
我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多商店功能)。
我想知道,是否可以在 Magento 前端执行 adminhtml 控制器的功能?
此时,我刚刚在 Magento 后端单击保存网站时创建文件夹并编辑 index.php, .htaccess。我需要更多,请帮助。
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: php magento automation
我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多商店功能)。
我想知道,是否可以在 Magento 前端执行 adminhtml 控制器的功能?
此时,我刚刚在 Magento 后端单击保存网站时创建文件夹并编辑 index.php, .htaccess。我需要更多,请帮助。
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: php magento automation
我认为这不是一个好主意 - 被允许创建自己的商店的人应该获得一个管理员帐户(您知道您可以定义具有受限权限的角色吗?)
但要回答这个问题:这是可能的。您必须创建一个自己的前端控制器来模拟登录的管理员用户,然后转发到 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。这不应该是您自己的拥有完全权限的管理员帐户,而是只有必要权限的虚拟帐户或真实帐户,每个用户都不同。
该方法在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'。
【讨论】:
_forward() 的工作原理?好吧,我的工作流程将如下所示:user register @ frontend > create role > create user > assign to role > create website,group,store > success