1

我突然遇到一个问题,我在 Symfony2 网站上收到以下错误: Variable "form" does not exist in SiteBackendBundle::layout.html.twig at line 2.

我的 SiteBackendBundle::layout.html.twig 文件如下所示:

{% extends '::base.html.twig' %}
{% form_theme form 'SiteBackendBundle:Form:fields.html.twig' %}
{% block body %}
....
{% endblock %}

我的 SiteBackendBundle:Form:fields.html.twig 看起来像这样:

{% block money_widget %}
{% spaceless %}
  {{ block('form_widget_simple') | raw }}
{% endspaceless %}
{% endblock %}

我的 Symfony/forms 的 config.yml 如下所示:

framework:
    #esi:             ~
    translator:      { fallback: en }
    secret:          %secret%
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: %kernel.debug%
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_proxies: ~
    session:         ~
    fragments:       ~

这也很奇怪,因为这在我跑之前就起作用了php app/console cache:clear

为什么我无法在不出现此错误的情况下扩展表单?这个确切的方法定义在http://symfony.com/doc/2.2/cookbook/form/form_customization.html#method-2-inside-a-separate-template

4

2 回答 2

4

如果扩展布局的一个或多个树枝文件不包含表单,那么您可能不会将表单变量传递给它们。您可以通过如下更新布局文件来解决此问题:

{% if form is defined %}
{% form_theme form 'SiteBackendBundle:Form:fields.html.twig' %}
{% endif %}
于 2013-06-03T23:17:44.700 回答
1

我实际上遇到了同样的问题。不确定这是否会有所帮助,但它对我有所帮助。在您的控制器中,您必须像我在您的 return 语句中所做的那样放入数组。

public function PrefixController extends Controller\
{
    if(...){
    }
    return $this->render('BundleName:ControllerPrefix:TwigTemplate.html.twig', array('form' => $form->createView()));

}
于 2014-03-02T06:37:15.897 回答