Symfony1 在Symfony 1.4中渲染任务的部分

Symfony1 在Symfony 1.4中渲染任务的部分,symfony1,symfony-1.4,simple-machines-forum,Symfony1,Symfony 1.4,Simple Machines Forum,我试图在Symfony任务中渲染一个部分,但没有运气。我发现1.1中的文档说只需调用get_partial(),但显然在1.4中不再可用。我尝试使用sfLoader::getHelpers('Partial')手动加载助手但我得到“未找到类sfLoader”。任何帮助都将不胜感激 作为参考,我正在尝试从我的全局标题部分生成一个名为“header.HTML”的HTML文件,用于我的所有布局,以包含在我正在集成的第三方论坛(Simple Machines/SMF)中.sfLoader在symfony

我试图在Symfony任务中渲染一个部分,但没有运气。我发现1.1中的文档说只需调用
get_partial()
,但显然在1.4中不再可用。我尝试使用
sfLoader::getHelpers('Partial')手动加载助手但我得到“未找到类sfLoader”。任何帮助都将不胜感激


作为参考,我正在尝试从我的全局标题部分生成一个名为“header.HTML”的HTML文件,用于我的所有布局,以包含在我正在集成的第三方论坛(Simple Machines/SMF)中.

sfLoader
在symfony 1.2中被弃用-我认为您需要查看1.4 API和您熟悉的任何版本的升级帮助,因为这些将是您需要大量参考的资源


解决问题的诀窍是使用
sfApplicationConfiguration
类提供的
loadHelpers()
方法加载帮助程序-您的任务应该在其
configure()
方法中挂接此方法。请注意,我以前没有这样做过…

您可以使用

$this->configuration
您还可以在taskClass::configure()方法中定义应用程序命令选项(如果您使用了symfony generate:task来生成任务类,则应将前端作为默认应用程序选项)。
或者,您可以在调用任务时使用cli中的--application=appName传递应用程序。

不要忘记在任务的选项中添加应用程序名称。请看这一行:

new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED,'The application name', 'frontend')

现在
$this->configuration
返回您需要的
sfApplicationConfiguration

这将实现以下功能:

//load the Partial helper to be able to use get_partial()
$contextInstance = sfContext::createInstance($this->configuration);
$contextInstance->getConfiguration()->loadHelpers('Partial');

刚刚在发送免费试用版nag电子邮件的任务中调用了一个partial,代码如下:

//combines the partial with passed variables and puts the results in a string variable
$contextInstance = sfContext::createInstance($this->configuration);
$contextInstance->getConfiguration()->loadHelpers('Partial');

$partial_in_a_string = $contextInstance->getController()
          ->getAction('module_name', 'action_name')
          ->getPartial('module_name/partial_name', array('var_name'=>'var_value'));
首次加载:

sfContext::getInstance()->getConfiguration()->loadHelpers('Partial');
然后打电话:

get_partial()

确保在配置方法中有应用程序选项:

protected function configure()
{
    $this->addOptions(array(
        new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend')
    ))
    ....
然后,在execute方法中:

protected function execute($arguments = array(), $options = array())
{
    sfContext::createInstance($this->configuration)->getConfiguration()->loadHelpers('Partial');
通过这种方式,您可以防止以下错误:

“默认”上下文不存在

传递给sfContext::createInstance()的参数1必须是实例 SFC应用程序配置的定义


我在execute方法中唯一可以访问的配置是
$this->configuration
中的ProjectConfiguration实例,知道如何获取sfApplicationConfiguration实例吗?我发现您可以在操作中执行$this->getContext()->getConfiguration()->loadHelpers(…),但我无权访问该配置或上下文。如果我尝试使用
sfContext::getInstance
获取当前上下文,我会得到“默认”上下文不存在”。要使用
sfContext::createInstance()
创建一个新的上下文,我需要一个应用程序配置来传入:-/。这一点很好。我将错误
参数1传递给sfContext::createInstance()必须是sfApplicationConfiguration的实例,给定的ProjectConfiguration的实例