Symfony2 / Doctrine提交表单需要很长时间

时间:2014-06-10 13:11:23

标签: php symfony doctrine-orm

我们在使用Symfony2和Doctrine创建一个小实体方面遇到了问题,它可以正常工作,但速度非常慢且内存耗尽。

我们认为问题出在Symfony的$form->submit()内。

这需要约0.1秒:

die('x');
$form->submit($request);

这需要约60秒:

$form->submit($request);
die('x');

我们尝试在此提交方法中“die()”,一直到return $this;,运行时间大约为0.1秒。似乎在幕后发生了其他事情,我们找不到问题。

运行XDebug告诉我们以下内容: Symfony \ Component \ Form \ Form-> submit具有最高的包含成本,主要是此调用:Symfony \ Component \ Form \ Form-> viewToNorm。

我们尝试过以下方法:

  • 设置realpath_cache_size = 4096k
  • 设置realpath_cache_ttl = 7200
  • 已禁用XDebug
  • 启用APC

开发或生产环境没有区别。

1 个答案:

答案 0 :(得分:1)

我们通过将query_builder添加到表单构建器来解决它,现在一切正常。

自:

->add('authentication', 'entity', array(
    'class' => 'Model\Authentication',
    'required' => false,
    'multiple' => false,
    'property' => 'id',
    'invalid_message' => _('No authentication entity found')    
))

为:

->add('authentication', 'entity', array(
    'class' => 'Model\Authentication',
     'required' => false,
     'multiple' => false,
     'property' => 'id',
     'invalid_message' => _('No authentication entity found'),
     'query_builder' => function (EntityRepository $er) {
          return $er
              ->createQueryBuilder('au')
              ->select('au')
          ;
      }    
))