Symfony1 在Symfony 1.4中渲染任务的部分
我试图在Symfony任务中渲染一个部分,但没有运气。我发现1.1中的文档说只需调用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
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的实例