2011-05-30 48 views
0

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

考虑采取以下行动:

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

你不能。这将打破MVC模式。 – Flukey 2011-05-30 08:20:56

回答

2

取决于你如何获取这些值,这些都是最好的路径:

  1. 如果通过对记录或表操作得到他们,移动代码到模型层,并呼吁从双方你的行动

  2. 如果你让他们其他方式(比如处理用户输入),你lib文件夹中创建一个实用工具类,并有将其添加为函数,调用来自您的行为

这样可以防止代码重复,并且不会中断MVC的关注点。

+0

你能告诉医生你如何调用和执行一个lib文件? – jpganz18 2013-04-26 01:13:26

+0

你为什么不[问一个问题](http://stackoverflow.com/questions/ask)? – Maerlyn 2013-04-26 05:53:13

0

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

  • 存储的值发送/和/或MYUSER类返回然后使用$this->forward()调用,而不会导致浏览器发出另一个请求执行相关动作。

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

相关问题