我在两个不同的模块中有两个不同的动作,我需要在另一个模块中执行其中一个。
考虑以下行动:
//first module
class module1Actions extends sfActions {
protected function function1Form(sfWebRequest $request, sfForm $form) {
//i need to call a function from module2 in here to do sth but i don't need any view to be returned.
//but i need some variables to be returned by the second action
}
}
//second module
class module2Actions extends sfActions {
protected function executeSth(sfWebRequest $request, sfForm $form) {
//Do Something in here and return some values.
}
}
正如我所说,我需要执行一个动作并从中获取一些值,但我不知道如何调用它。它在一个不同的模块中。我可以访问它吗?怎么样?以及我如何获得价值?
感谢。
答案 0 :(得分:2)
根据您获得这些值的方式,这些是最佳途径:
如果您通过记录或表格上的操作获取它们,请将代码移到模型图层中,并从您的操作中调用它
如果你以其他方式获得它们(比如处理用户输入),在lib
文件夹中创建一个实用程序类,并将其作为函数添加到那里,并从你的两个动作中调用它
这样可以防止代码重复,并且仍然不会破坏关注点的MVC分离。
答案 1 :(得分:0)
我要为Maerlyn的回答添加第三种方法。它在几个有限的情况下有用,可以防止重复代码,但也不会通过在模型层中移动错误代码来破坏正确的MVC设计。
$this->forward()
调用运行相关操作,而不会导致浏览器发出其他请求。请注意,$ this-> forward()会立即停止您调用它的操作,转发操作的模板将显示为该模板。