Zend Framework 2 как реализовать модуль опросов?

Делаю проект на Zend Fremework 2 + Doctrine ORM. Есть задача написать конструктор опросов. В опросе может быть неограниченное количество вопросов. Ответ на вопрос может иметь один из 5 типов: Text, Textarea, Radio, MultiCheckbox ,Select. Вариантов при множественном выборе может быть неограниченное количество. Задачу, вроде как, решил, но с костылем. Уверен, что есть нативное решение на основе коллекций, но никак не могу к нему прийти.

Итак, сейчас структура следующая (Название моделей выдуманы, чтобы проще понять):
  • Модель Interview (id, название опроса)
  • AnswerType (Типы ответов)
  • InterviewQuestion(Вопросы с привязкой к Interview и AnswerType)
  • InterviewQuestionAnswer (Варианты ответов с привязкой к InterviewQuestion)
  • InterviewUserAnswer (Ответы пользователя с привязкой к InterviewQuestion, InterviewQuestionAnswe, Userr)


При генерации формы для ответов генерируются филдсеты. Пример:
if (!empty($this->questions)) {
    foreach ($this->questions as $question) {
        switch ($question->getQuestionType()->getTypeName()) {
            case 'Text':
                $this->add(array(
                    'name'       => $question->getId(),
                    'type'       => $question->getQuestionType()->getTypeName(),
                    'options'    => array(
                        'label' => $question->getQuestionText(),
                    ),
                    'attributes' => array(
                        'class' => 'form-control'
                    ),
                ));
                break;

            case 'MultiCheckbox':
                $this->add(array(
                    'name'       => $question->getId(),
                    'type'       => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
                    'options'    => array(
                        'label'          => $question->getQuestionText(),
                        'object_manager' => $objectManager,
                        'target_class'   => 'Category\Entity\RegAppAnswers',
                        'property'       => 'answer',
                        'is_method'      => true,
                        'find_method'    => array(
                            'name'   => 'findBy',
                            'params' => array(
                                'criteria' => array('question' => $question->getId()),
                            ),
                        ),
                    ),
                    'attributes' => array(
                        'class' => 'checkbox-inline'
                    ),
                ));

                break;
        }
    }
}

Все хорошо идет до сохранения формы. При сохранение успешно проходит валидация, но записи в базу вставляю через foreach.
Может у кого-то возникала подобная задача, либо есть более совершенный алгоритм? Готового модуля не нашел.
Заранее благодарен.
  • Вопрос задан
  • 344 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы