Symfony4 Twig模板错误:变量“小部件”不存在
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony4 Twig模板错误:变量“小部件”不存在相关的知识,希望对你有一定的参考价值。
我试图找到我犯的错误,但我看不到任何......也许我正在查看错误的文件,但我已经尝试在任何地方查找我已经做过更改,然后才会出现此错误。
这是我的枝条代码:
{% extends 'base.html.twig' %}
{% block body %}
<div class="container">
{% form_theme form 'bootstrap_4_layout.html.twig' %}
{{ form_start(form) }}
<br>
Name {{ form_widget(form.name) }}
Price {{ form_widget(form.price) }}
Available {{ form_widget(form.available) }}
Date {{ form_widget(form.date) }}
<div class="row js-ticket-time-wrapper"
data-prototype="{{ form_widget(form.times.vars.prototype)|e('html_attr') }}"
data-index="{{ form.times|length }}">
{% for time in form.times %}
<div class="col-xs-4 js-ticket-time-item">
<a href="#" class="js-remove-time pull-right">
<span class="fa fa-close"></span>
</a>
{{ form_row(time.name) }}
</div>
{% endfor %}
<a href="#" class="js-ticket-time-add">
<span class="fa fa-plus-circle"></span>
Add another Time
</a>
</div>
<button type="submit" class="btn btn-primary" formnovalidate>Save</button>
{{ form_end(form) }}
</div>
{% endblock %}
{% block js %}
{{ parent() }}
<script>
jQuery(document).ready(function() {
var $wrapper = $('.js-ticket-time-wrapper');
$wrapper.on('click', '.js-remove-time', function(e) {
e.preventDefault();
$(this).closest('.js-ticket-time-item')
.fadeOut()
.remove();
});
$wrapper.on('click', '.js-ticket-time-add', function(e) {
e.preventDefault();
// Get the data-prototype explained earlier
var prototype = $wrapper.data('prototype');
// get the new index
var index = $wrapper.data('index');
// Replace '__name__' in the prototype's HTML to
// instead be a number based on how many items we have
var newForm = prototype.replace(/__name__/g, index);
// increase the index with one for the next item
$wrapper.data('index', index + 1);
// Display the form in the page before the "new" link
$(this).before(newForm);
});
});
</script>
{% endblock %}
我还对实体时间和票证进行了更改,但我不认为这是以某种方式连接的。
这是我的TicketType表单:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name',TextType::class)
->add('price',MoneyType::class)
->add('available',IntegerType::class)
->add('date',DateType::class)
->add('times', CollectionType::class, array(
'entry_type' => AppFormTimeType::class,
'allow_delete' => true,
'by_reference' => false,
'allow_add' => true,
));
}
这是TimeType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', TextType::class);
}
答案
因为formtype TimeType
的类名与Symfony TimeType(https://symfony.com/doc/current/reference/forms/types/time.html)相同,所以formtheme布局会尝试呈现symfony类型而不是你的类型。你可以看到symfony TimeType
有一个名为widget
的选项,所以formtype期待这种类型。
所以尝试将你的TimeType
重命名为TicketTimeType
之类的东西。
或者您可以在TimeType
中重命名块前缀:
public function getBlockPrefix()
{
return "ticket_time_type";
}
以上是关于Symfony4 Twig模板错误:变量“小部件”不存在的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4:添加Twig_Extension_StringLoader