通过BuildView方法将变量传递给Twig(Symfony2)

3
我在寻找解决方案,但在stackoverflow上没有找到任何解决方法。
问题是我想将一个对象传递给twig模板。
我有一个类,它扩展了Symfony2 Core的AbstractType。然后我明白了我必须重写我的特定类型的BuildView方法来传递变量。
buildView方法看起来像这样:
/**
 *
 * @param FormView $view
 * @param FormInterface $form
 * @param array $options
 */
public function buildView(FormView $view, FormInterface $form, array $options)
{
    parent::buildView($view, $form, $options);
    $view->vars['test']='test';

}

当我尝试在twig文件中访问变量({{test}})时,它告诉我找不到变量test。

我误解了什么? 感谢您的帮助 AS

2个回答

0

没有看到整个代码,我怀疑你在存在父视图的情况下将视图变量添加到子视图中。

$view->parent->vars['test'] = 'test';

希望能解决你的问题。


我尝试过了,但是我收到了一个异常报告:"在src/AppBundle/Resources/views中渲染模板时抛出了一个异常(“注意:undefined index:cache_key”)。有趣的是,当我使用$view->vars ['test'] ='test';时,我没有收到这个错误报告。 - AugustusS
好的,尝试将buildView中除了parent::调用之外的所有内容都删除,然后在其下添加以下内容:$view->vars = array_replace($view->vars, array( 'test' => 'test' ));cache_key键是BaseType类的一部分,该类扩展了AbstractType类,您是否在任何地方使用它? - MichaelHindley
我没有在其他地方使用BaseType。按照您的建议更改这个会导致我再次遇到同样的问题,即找不到变量test。如果我在抽象类方法buildView中添加这一行"$view->vars['test']='test';",那么他就可以找到变量test了。 - AugustusS
你尝试过在调用parent::buildView之前设置$view->vars['test'] = 'test'吗?你正在使用哪个版本的Symfony? - MichaelHindley
使用最新版本的Symfony。 - AugustusS
你是否使用了任何REST库或自定义的onKernelResponse事件监听器,可能会改变视图变量?否则我就束手无策了,抱歉 :/ - MichaelHindley

0

你正在将新变量“test”附加到你的表单上,所以要访问它,你必须通过表单:

{{ formName.vars.test }}

希望能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接