问题描述
|
我在两个不同的模块中有两个不同的操作,我需要在另一个模块中执行其中一个。
考虑以下操作:
//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.
}
}
如我所说,我需要执行一个动作并从中获取一些值,但我不知道如何调用它。它在另一个模块中。我可以使用它吗?怎么样?以及我如何找回价值?
谢谢。
解决方法
根据获得这些值的方式,以下是最佳途径:
如果通过记录或表上的操作获取它们,请将代码移至模型层,然后从两个动作中调用
如果以其他方式(例如处理用户输入)获取它们,则在
lib
文件夹中创建一个实用程序类,并将其添加为函数,然后从两个操作中调用该类
这样,您可以防止代码重复,并且仍然不会破坏MVC的关注点分离。
, 我将为Maerlyn的答案添加第三个方法。它在几种有限的情况下很有用,可防止代码重复,但也不会通过将错误的代码移到模型层来破坏正确的MVC设计。
将要发送/和/或返回的值存储在myUser类中,然后使用$this->forward()
调用运行相关操作,而不会导致浏览器再次发出请求。
请注意,$ this-> forward()立即停止您从中调用它的操作,并且所转发操作的模板将显示出来。