我想调用另一个控制器动作,但保持现状。我只想在其他操作中运行代码。
具体来说:我有一个控制器动作来发送电子邮件。
links = [[url + day for day in to_append] for url in base_urls]
links_flattened = sum(links, [])
上述行动应该由以下行动调用:
class StreitController extends Zend_Controller_Action {
// Fill and send mail
public function emailAction() {
$this->_helper->layout->disableLayout();
// ... do something ...
// Capture output and send mail
$htmlString = $this->view->render('task/email.phtml');
$this->sendMail($this->view->task['TASK_NAME'], $htmlString, $this->view->task['TASK_EMAIL']);
}
}
runAction修改了一些数据。之后,应调用电子邮件操作以填充电子邮件模板(.phtml文件)并将其发送给接收方。但这应该是透明的。所以我不想离开调用runAction。这有可能吗?
答案 0 :(得分:1)
看起来您可以使用forward()方法,只要它是您希望在该操作中执行的 last :
$this->forward('email', 'task');
但我会反对它。
每当你有一段由多个消费者拥有多个代码的代码时,我认为最好将该代码重构为自己的类/方法,然后让消费者实例化/调用。
例如,您可以将“发送电子邮件”代码放入action-helper。这提供了一种用于调用功能的延迟加载按需机制。
在您的具体情况下,在多个操作中使用“发送电子邮件”代码的快捷方式是将其提升为BaseController
上的方法并同时具有TaskController
和StreitController
延长BaseController
。
请注意,通常情况下,操作助手比基本控制器更理想,因为使用基本控制器将需要所有加载代码,即使它不用过。