我有一个包含许多文本字段的表单,选择其中一个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建议我。谢谢。
答案 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'];
}
您会发现您的代码更具可读性。