我需要Observer中的控制器方法
我的观察员:
public function observer()
{
//need controller action here
}
我的控制器:
public function adminAction()
{
//my action
}
我的问题
答案 0 :(得分:4)
您可以使用
在任何地方实例化控制器$controller = Mage::getControllerInstance(
'The_Controller_Class',
Mage::app()->getRequest(),
Mage::app()->getResponse());
要判断这是否是最佳方法,我需要了解更多有关您的用例的信息,但可能不是。如果您想要在不重定向的情况下显示其他页面,请查看Mage_Core_Controller_Varien_Action::_forward()
:
/**
* 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
*/
protected function _forward($action, $controller = null, $module = null, array $params = null)
{
$request = $this->getRequest();
$request->initForward();
if (isset($params)) {
$request->setParams($params);
}
if (isset($controller)) {
$request->setControllerName($controller);
// Module should only be reset if controller has been specified
if (isset($module)) {
$request->setModuleName($module);
}
}
$request->setActionName($action)
->setDispatched(false);
}
不幸的是,它受到保护,所以它只能在控制器中使用。但你可以从其他任何地方做同样的事情。这里发生了什么:
Mage::app()->getRequest()
获得)已备份:$request->initForward()
如果您的观察者附加到调度之前发生的事件,则更改请求参数就足够了。