Максимальное время выполнения 30 секунд превышено в ZendFramework-1.11.11 \ Zend \ Form.php на строке 3011 в Zend Framework - PullRequest
0 голосов
/ 03 января 2012

У меня есть форма со многими текстовыми полями, в которой выборка, в которой один выбор и один мультиэлемент имеют одинаковые данные, извлеченные из базы данных, с помощью следующего кода:

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

Почему возникает эта проблема? Из-за избыточных данных я идупоставить два выпадающих на одной и той же форме? Плз предложить мне. Спасибо заранее.

1 Ответ

1 голос
/ 04 января 2012

Проблема в вашем втором 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'];
}

ВыВы найдете ваш код гораздо более читабельным.

...