Magento:前端的 Adminhtml 控制器?
Magento: Adminhtml controllers in frontend?
我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多商店功能)。
我想知道,是否可以在 Magento 前端执行 adminhtml 控制器的功能?
此刻,我刚刚在 Magento 后端点击保存网站时创建文件夹并编辑 index.php, .htaccess
。我需要更多,请帮助。
如有任何帮助,我们将不胜感激。谢谢!
我认为这不是一个好主意 - 被允许创建自己的商店的人应该获得一个管理员帐户(您知道您可以定义具有受限权限的角色吗?)
但要回答这个问题:这是可能的。您将必须创建一个自己的前端控制器来模拟登录的管理员用户,然后转发到 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
*/
它操纵当前请求对象并将其设置为"not dispatched",这样前端控制器将根据新参数再次尝试找到合适的动作控制器来调度它。
实际上我的第一个版本有一个错误,_forward 没有像 'adminhtml/store/save'
这样的路由作为参数,而是以相反的顺序分开的部分,'save', 'store', 'adminhtml'
.
我正在尝试编写一个模块,允许用户在我们的系统中创建自己的商店(多商店功能)。
我想知道,是否可以在 Magento 前端执行 adminhtml 控制器的功能?
此刻,我刚刚在 Magento 后端点击保存网站时创建文件夹并编辑 index.php, .htaccess
。我需要更多,请帮助。
如有任何帮助,我们将不胜感激。谢谢!
我认为这不是一个好主意 - 被允许创建自己的商店的人应该获得一个管理员帐户(您知道您可以定义具有受限权限的角色吗?)
但要回答这个问题:这是可能的。您将必须创建一个自己的前端控制器来模拟登录的管理员用户,然后转发到 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
*/
它操纵当前请求对象并将其设置为"not dispatched",这样前端控制器将根据新参数再次尝试找到合适的动作控制器来调度它。
实际上我的第一个版本有一个错误,_forward 没有像 'adminhtml/store/save'
这样的路由作为参数,而是以相反的顺序分开的部分,'save', 'store', 'adminhtml'
.