【问题标题】:symfony - calling an action from another actionsymfony - 从另一个动作调用一个动作
【发布时间】:2011-05-30 07:48:01
【问题描述】:

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

考虑以下行动:

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

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

谢谢。

【问题讨论】:

  • 你不能。这将打破 MVC 模式。

标签: model-view-controller symfony1 action


【解决方案1】:

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

  1. 如果您通过对记录或表的操作获取它们,请将代码移动到模型层,然后从您的两个操作中调用它

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

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

【讨论】:

  • 你能告诉我你如何调用和执行一个lib文件吗?
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多