属性 尽管已分配,但模板中不存在
Property does not exists in template although its assigned
我正在开发一个 Symfony 应用程序以将仪表值添加到仪表。一个仪表可以有一组测量值,对于每个测量值,我想显示一个值表以输入值。
为此,我在控制器中有一个函数,它根据相应的测量值创建 ArrayCollection
新元素,如下所示:
/**
* @Route("/{id}/add", name="metervalue_add", methods={"GET","POST"})
*/
public function add(Request $request, Meter $meter): Response
{
$metervalues = new ArrayCollection();
$measurements = $meter->getMeasurements();
// create an empty metervalue for each measurement of the meter
foreach ($measurements as $measurement) {
$mv = new MeterValue();
$mv->setMeter($meter);
$mv->setMeasurement($measurement);
$metervalues->add($mv);
}
$form = $this->createForm(MeterValueAddType::class, ['metervalues' => $metervalues]);
$form->handleRequest($request);
// ... form submitting stuff
// ...
return $this->renderForm('metervalue/add.html.twig', [
'form' => $form
]);
}
对应的MeterValueAddType看起来像
class MeterValueAddType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('metervalues', CollectionType::class, [
'entry_type' => MeterValueType::class
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
当我呈现表单时一切正常,空对象按预期呈现,我可以提交表单并且所有数据都正确插入数据库,包括测量和仪表 ID。
但是,在我的模板中,我无法访问 metervalue
对象的属性,例如 metervalues.measurement
或 metervalue.meter
{% for metervalue in form.metervalues %}
{{ form_widget(metervalue.value) }}
{{ form_widget(metervalue.date) }}
Name of measurement: {{ metervalue.measurement.name }} <-- this throws the following error
{% endfor %}
Error: Neither the property "measurement" nor one of the methods
"measurement()",
"getmeasurement()"/"ismeasurement()"/"hasmeasurement()" or "__call()"
exist and have public access in class
"Symfony\Component\Form\FormView".
我不明白为什么我不能访问这里的属性只是为了显示它们,因为它们是在控制器中分配的,并在保存时正确存储在数据库中...
属性“测量”和相应的“getmeasurement()”存在,例如如果我在列表中显示所有保存的对象,我可以访问这些
msg 的提示为我指明了正确的方向。必须使用
{{ metervalue.vars.data.meter.name }}
让它工作!谢谢
我正在开发一个 Symfony 应用程序以将仪表值添加到仪表。一个仪表可以有一组测量值,对于每个测量值,我想显示一个值表以输入值。
为此,我在控制器中有一个函数,它根据相应的测量值创建 ArrayCollection
新元素,如下所示:
/**
* @Route("/{id}/add", name="metervalue_add", methods={"GET","POST"})
*/
public function add(Request $request, Meter $meter): Response
{
$metervalues = new ArrayCollection();
$measurements = $meter->getMeasurements();
// create an empty metervalue for each measurement of the meter
foreach ($measurements as $measurement) {
$mv = new MeterValue();
$mv->setMeter($meter);
$mv->setMeasurement($measurement);
$metervalues->add($mv);
}
$form = $this->createForm(MeterValueAddType::class, ['metervalues' => $metervalues]);
$form->handleRequest($request);
// ... form submitting stuff
// ...
return $this->renderForm('metervalue/add.html.twig', [
'form' => $form
]);
}
对应的MeterValueAddType看起来像
class MeterValueAddType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('metervalues', CollectionType::class, [
'entry_type' => MeterValueType::class
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
当我呈现表单时一切正常,空对象按预期呈现,我可以提交表单并且所有数据都正确插入数据库,包括测量和仪表 ID。
但是,在我的模板中,我无法访问 metervalue
对象的属性,例如 metervalues.measurement
或 metervalue.meter
{% for metervalue in form.metervalues %}
{{ form_widget(metervalue.value) }}
{{ form_widget(metervalue.date) }}
Name of measurement: {{ metervalue.measurement.name }} <-- this throws the following error
{% endfor %}
Error: Neither the property "measurement" nor one of the methods "measurement()", "getmeasurement()"/"ismeasurement()"/"hasmeasurement()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".
我不明白为什么我不能访问这里的属性只是为了显示它们,因为它们是在控制器中分配的,并在保存时正确存储在数据库中...
属性“测量”和相应的“getmeasurement()”存在,例如如果我在列表中显示所有保存的对象,我可以访问这些
msg 的提示为我指明了正确的方向。必须使用
{{ metervalue.vars.data.meter.name }}
让它工作!谢谢