Symfony1 Symfony任务:获取模块/操作的输出

Symfony1 Symfony任务:获取模块/操作的输出,symfony1,task,Symfony1,Task,是否可以在任务中捕获操作的输出 例: 在我的任务中: 操作->索引 这可能吗?是的。在任务的execute()方法中: sfContext::createInstance($this->configuration); $output = sfContext::getInstance()->getController()->getPresentationFor("module", "action"); 动作和关联视图的结果输出将存储在$output中 如果您的操作需要在会话中设

是否可以在任务中捕获操作的输出

例:

在我的任务中:

操作->索引


这可能吗?

是的。在任务的
execute()
方法中:

sfContext::createInstance($this->configuration);
$output = sfContext::getInstance()->getController()->getPresentationFor("module", "action");
动作和关联视图的结果输出将存储在
$output

如果您的操作需要在会话中设置变量,您还可以执行以下操作:

sfContext::getInstance()->getUser()->setAttribute("mySessionVar", 123);
sfContext::getInstance()->getUser()->setFlash("myFlashVar", "foo");

调用
getPresentationFor()
,以便在执行操作时变量存在。

是。在任务的
execute()
方法中:

sfContext::createInstance($this->configuration);
$output = sfContext::getInstance()->getController()->getPresentationFor("module", "action");
动作和关联视图的结果输出将存储在
$output

如果您的操作需要在会话中设置变量,您还可以执行以下操作:

sfContext::getInstance()->getUser()->setAttribute("mySessionVar", 123);
sfContext::getInstance()->getUser()->setFlash("myFlashVar", "foo");

调用
getPresentationFor()
,以便在执行操作时变量存在。

您不应该在任务中执行此操作!控制器操作不是为此目的生成的。只要重构你的控制器。将需要与任务共享的代码提取到单独的类中,并在操作和任务中使用该类!请记住,sfContext不是可靠的信息来源。此对象的内容取决于应用程序的启动方式(Commandline!=HTTP)

您不应该在任务中执行此操作!控制器操作不是为此目的生成的。只要重构你的控制器。将需要与任务共享的代码提取到单独的类中,并在操作和任务中使用该类!请记住,sfContext不是可靠的信息来源。此对象的内容取决于应用程序的启动方式(Commandline!=HTTP)

这是可能的,但如果此代码在许多情况下使用,则最好将其放在模型中。这是可能的,但如果此代码在许多情况下使用,则最好将其放在模型中。sfContext不可靠或不理想,您是正确的。然而,我认为有很多应用程序可以在任务中获取控制器输出——使用标准布局装饰器的自动HTML电子邮件就是一个让人想到的例子。您也可以使用提供的MVC风格的结构:-)这正是我想要做的:我想设置一个任务,根据数据库中的内容发送电子邮件,这是在cron脚本中运行的。基本上都是以异步方式完成的。那么现在,当你说“使用MVC风格的结构,你到底指的是什么?对于HTML电子邮件,你是正确的。你需要Symfony的一些视图部分以及sfContext。但是,即使您想发送电子邮件,我还是希望在任务中呈现部分,而不是使用操作方法,这样您就不会依赖于请求/响应处理,可以使用模板生成电子邮件。@Paul-显然,在Symfony中,您有一个模型-视图-控制器样式堆栈。因此,在HTML电子邮件案例中,您可以在操作和视图中的表示中执行所需的任何逻辑(检索用户的配置文件详细信息等),就像您对包含任何布局装饰符、部分等的网页所做的一样。然后通过我的回答中的方法捕获输出,并通过SwiftMailer或类似方式发送。sfContext不可靠或不理想,你是对的。然而,我认为有很多应用程序可以在任务中获取控制器输出——使用标准布局装饰器的自动HTML电子邮件就是一个让人想到的例子。您也可以使用提供的MVC风格的结构:-)这正是我想要做的:我想设置一个任务,根据数据库中的内容发送电子邮件,这是在cron脚本中运行的。基本上都是以异步方式完成的。那么现在,当你说“使用MVC风格的结构,你到底指的是什么?对于HTML电子邮件,你是正确的。你需要Symfony的一些视图部分以及sfContext。但是,即使您想发送电子邮件,我还是希望在任务中呈现部分,而不是使用操作方法,这样您就不会依赖于请求/响应处理,可以使用模板生成电子邮件。@Paul-显然,在Symfony中,您有一个模型-视图-控制器样式堆栈。因此,在HTML电子邮件案例中,您可以在操作和视图中的表示中执行所需的任何逻辑(检索用户的配置文件详细信息等),就像您对包含任何布局装饰符、部分等的网页所做的一样。然后通过我的答案中的方法捕获输出,并通过SwiftMailer或类似方法发送。