symfony - 从另一个动作调用一个动作

时间:2011-05-30 07:48:02

标签: model-view-controller symfony1 action

我在两个不同的模块中有两个不同的动作,我需要在另一个模块中执行其中一个。

考虑以下行动:

//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.
     }
}

正如我所说,我需要执行一个动作并从中获取一些值,但我不知道如何调用它。它在一个不同的模块中。我可以访问它吗?怎么样?以及我如何获得价值?

感谢。

2 个答案:

答案 0 :(得分:2)

根据您获得这些值的方式,这些是最佳途径:

  1. 如果您通过记录或表格上的操作获取它们,请将代码移到模型图层中,并从您的操作中调用它

  2. 如果你以其他方式获得它们(比如处理用户输入),在lib文件夹中创建一个实用程序类,并将其作为函数添加到那里,并从你的两个动作中调用它

  3. 这样可以防止代码重复,并且仍然不会破坏关注点的MVC分离。

答案 1 :(得分:0)

我要为Maerlyn的回答添加第三种方法。它在几个有限的情况下有用,可以防止重复代码,但也不会通过在模型层中移动错误代码来破坏正确的MVC设计。

  • 在myUser类中存储要发送/和/或返回的值,然后使用$this->forward()调用运行相关操作,而不会导致浏览器发出其他请求。

请注意,$ this-> forward()会立即停止您调用它的操作,转发操作的模板将显示为该模板。