我突然遇到一个问题,我在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
定义答案 0 :(得分:4)
如果扩展布局的一个或多个twig文件不包含表单,那么可能您不会将表单变量传递给它们。您可以通过更新布局文件来解决此问题:
{% if form is defined %}
{% form_theme form 'SiteBackendBundle:Form:fields.html.twig' %}
{% endif %}
答案 1 :(得分:1)
我实际上遇到了同样的问题。不确定这是否会有所帮助,但它对我有所帮助。在你的Controller中,你必须像在返回语句中一样放入数组。
public function PrefixController extends Controller\
{
if(...){
}
return $this->render('BundleName:ControllerPrefix:TwigTemplate.html.twig', array('form' => $form->createView()));
}