Search code examples
zend-frameworkzend-db

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


I have a form with many textfields ,selects in which one select and one multiselect has same data fetched from database by following code:

    //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;

Here class Project_Model_DbTable_Company maps to a database table named company which contains 328 rows.Now When: I comment line B everything is going fine but when I uncomment line B error occurs saying as

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

Why is this problem occuring??Is it due to excessive data that I am going to put in two dropdowns on same form?Plz suggest me.Thanks in advance.


Solution

  • The problem is in your second foreach loop. These lines

    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;
    

    are adding 328 options 328 times. the addMultiOptions() method accepts an array and iterates through it. Your code should be changed to:-

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

    That should allow your code to run within the max_execution_time limit although I still think it's a bad idea to have 328 options in a drop down. I'm sure a bit of thought on your part would discover a much more elegant and user friendly alternative.

    Also try changing your foreach blocks to look like this:-

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

    You'll find your code is much more readable.