Zend Framework中第3011行的ZendFramework-1.11.11 \ Zend \ Form.php超过30秒的最大执行时间

时间:2012-01-03 14:46:45

标签: zend-framework zend-db

我有一个包含许多文本字段的表单,选择其中一个select和一个multiselect通过以下代码从数据库中获取相同的数据:

    //Form1
    $form_project=new Project_Form_AddProject();
    //Form2
    $form_project_type=new Project_Form_ProjectType();

    //add values to dropdown companies
    $object_company=new Project_Model_DbTable_Company();
    $list_companies=$object_company->fetchAll();
    foreach ($list_companies as $clist) :
        $name = $clist['company_name'];

        $dropdown_list[$clist['company_id']] = $clist['company_name'];

    endforeach;
    foreach ($dropdown_list as $key => $value):
        //Line A
        $form_project->customer->addMultiOptions($dropdown_list);//customer is select
        //Line B
        $form_project_type->partner->addMultiOptions($dropdown_list);//partner is multiselect
    endforeach;

此类Project_Model_DbTable_Company映射到名为company的数据库表,该表包含328行。现在: 我评论B行一切都很顺利但是当我取消注释B行时出现错误

 Maximum execution time of 30 seconds exceeded in ZendFramework-1.11.11\\Zend\Form.php on line 3011

为什么会出现这个问题?是否由于过多的数据导致我将在同一个表单上的两个下拉列表?Plz建议我。谢谢。

1 个答案:

答案 0 :(得分:1)

问题出在你的第二个foreach循环中。这些行

foreach ($dropdown_list as $key => $value):
    //Line A
    $form_project->customer->addMultiOptions($dropdown_list);//customer is select
    //Line B
    $form_project_type->partner->addMultiOptions($dropdown_list);//partner is multiselect
endforeach;

正在添加328个选项328次。 addMultiOptions()方法接受一个数组并迭代它。您的代码应更改为: -

//Line A
$form_project->customer->addMultiOptions($dropdown_list);//customer is select
//Line B
$form_project_type->partner->addMultiOptions($dropdown_list);//partner is multiselect

这应该允许您的代码在max_execution_time限制内运行,尽管我仍然认为在下拉列表中有328个选项是个坏主意。我确信你会想到一个更优雅和用户友好的替代方案。

还可以尝试将foreach块更改为: -

foreach ($list_companies as $clist){
    $name = $clist['company_name'];
    $dropdown_list[$clist['company_id']] = $clist['company_name'];
}

您会发现您的代码更具可读性。