我在创建的表单中有多种选择字段,但所有这些字段都是从代码中定义的PHP数组加载的。 createForm()
被赋予一个空模型。每个字段,当用form_row()
在树枝上渲染大约2秒进行渲染时,每个字段都要求大约8或9秒,这很荒谬。我尝试过搜索,阅读等等,据我所知,我遵循最佳做法。没有运行数据库查询。请帮我解决这个巨大的性能问题。
让我们从表单类型开始:
class SubscriptionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('latitude', 'hidden')
->add('longitude', 'hidden')
->add('crop', 'choice', [
'choices' => Crop::getFormChoices(),
'required' => true,
])
->add('infliction', 'choice', [
'choices' => Infliction::getFormChoices(),
'required' => true,
])
->add('emergenceDate', 'date')
->add('threshold', 'choice', [
'choices' => Threshold::getFormChoices(),
'label' => 'Severity threshold',
'required' => true,
])
->add('save', 'submit', ['label' => 'Subscribe']);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults([
'data_class' => 'PlantPath\Bundle\VDIFNBundle\Entity\Subscription',
]);
}
public function getName()
{
return 'subscription';
}
}
然后,在我的控制器中:
public function formAction(Request $request)
{
$subscription = new Subscription();
$form = $this->createForm(new SubscriptionType(), $subscription);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// ...
}
return $this->render('PlantPathVDIFNBundle:Subscription:form.html.twig', [
'form' => $form->createView(),
]);
}
订阅/ form.html.twig:
{{ form_start(form, {'attr': {'id': 'subscription-form'}}) }}
{{ form_row(form.crop) }}
{{ form_row(form.infliction) }}
{{ form_row(form.emergenceDate) }}
{{ form_row(form.threshold) }}
{{ form_end(form) }}
正如我所提到的,每次拨打form_row()
都需要两秒钟。如果我取出所有form_row()
和form_end()
,则会在几毫秒内呈现模板(没有表单)。我无法理解为什么Symfony需要超过8秒的时间才能为空白表单呈现几行HTML。
答案 0 :(得分:0)
用于在bootstrap_3_layout.html.twig中呈现选项字段的块包含“| trans”过滤器,该过滤器尝试查找每个选项的翻译。 如果您不想翻译,请覆盖twig文件中的choice_widget_options块。这应该消除由于翻译而引起的警告消息。