Symfony Form — вопросы (викторина) с вариантами выбораPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Symfony Form — вопросы (викторина) с вариантами выбора

Сообщение Anonymous »

Я пытаюсь создать форму Symfony для викторины, в которой есть вопросы и варианты выбора для каждого вопроса (см. код сущностей). У меня есть объект RequestQuestion, который содержит описание, isActive, варианты. Варианты выбора — это еще одна сущность, содержащая имя, правильность и отношение к вопросу. И, наконец, Request содержит варианты ManyToMany (что означает, что пользователь отметил этот выбор).
Но теперь у меня возникла проблема: мне нужно каким-то образом в форме группировать варианты выбора вопросы (с использованием EntityType с множественным и расширенным значением true). И нет — group_by EntityType не работает для Multiple = Extended = True. Это работает только для поля выбора.
Позже я добавил в запрос связь с вопросом. Это решило половину проблемы — теперь я мог в FormType добавлять к вопросам CollectionType (который является еще одним FormType RequestQuestionType). Обратите внимание, что это создает избыточность в БД, что нехорошо. (На самом деле это не так. У меня нет информации, какие вопросы использовались для этого запроса, поскольку вопросы могут меняться со временем, если установить isActive или добавление новых вопросов). Но теперь проблема в RequestQuestionType. Я не могу добавить ответ, так как вопрос не имеет этого отношения (он имеет только Request или QuestionChoice).
Вопрос в том, как мне получить ответы в этой форме? Я не могу использовать родительский (

Код: Выделить всё

RequestFormType
), так как я не мог сгруппировать варианты по вопросам и в вопросах (

Код: Выделить всё

RequestQuestionType
) Я не могу добавить отношение. Ниже я отправляю текущее состояние кода.
Запрос

Код: Выделить всё

    /**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="uuid")
*/
private $uuid;

/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="requests")
* @ORM\JoinColumn(nullable=false)
*/
private $User;

/**
* @ORM\Column(type="datetime")
*/
private $created;

/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $resolved;

/**
* @ORM\ManyToOne(targetEntity=User::class)
*/
private $resolvedBy;

/**
* @ORM\Column(type="string", length=32)
*/
private $state;

/**
* @ORM\Column(type="string", length=255)
*/
private $address;

/**
* @ORM\ManyToMany(targetEntity=RequestQuestion::class, inversedBy="requests")
*/
private $questions;

/**
* @ORM\ManyToMany(targetEntity=RequestQuestionChoice::class, inversedBy="scholarRequestsAnswers")
*/
private $answers;
RequestQuestion

Код: Выделить всё

    /**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="text")
*/
private $description;

/**
* @ORM\Column(type="boolean")
*/
private $isActive;

/**
* @ORM\OneToMany(targetEntity=RequestQuestionChoice::class, mappedBy="Question", orphanRemoval=true)
*/
private $choices;

/**
* @ORM\ManyToMany(targetEntity=Request::class, mappedBy="questions")
*/
private $requests;
RequestQuestionChoice

Код: Выделить всё

    /**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="string", length=255)
*/
private $name;

/**
* @ORM\Column(type="boolean")
*/
private $correct;

/**
* @ORM\ManyToOne(targetEntity=RequestQuestion::class, inversedBy="choices")
* @ORM\JoinColumn(nullable=false)
*/
private $Question;
RequestFormType

Код: Выделить всё

class RequestFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('address', TextType::class, [
'constraints' => [
new NotBlank([
'message' => "Zadejte adresu"
])
]
])
->add('questions', CollectionType::class, [
'entry_type' => RequestQuestionType::class,
'entry_options' => [
'questions' => $builder->getData()->getQuestions()
]
])
->add('tos', CheckboxType::class, [
'mapped' => false,
'value' => false,
'constraints' => [
new IsTrue([
'message' => "Musíte souhlasit s našimi podmínkami použití"
])
]
])
->add('Submit', SubmitType::class)
;
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' =>  Request::class
]);
}
}
RequestQuestionType

Код: Выделить всё

class RequestQuestionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$index = str_replace(["[", "]"], "", $builder->getPropertyPath());

$builder
->add('???', EntityType::class, [
'class' => RequestQuestionChoice::class,
'choice_label' => 'name',
'choices' => $options["questions"][$index]->getChoices(),
'expanded' => true,
'multiple' => true
]);
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'questions' => []
]);
}
}
Примечание: по какой-то причине вопросы из RequestFormType не передаются как данные (data = null), поэтому я передаю их как enter_options. Но в RequestQuestionType он вызывает его столько раз, сколько количество вопросов, так что это немного странно, но мне удалось обойти это с помощью input_otpions и использовать индекс из propertyPath.
Примечание: запрос предварительно создается с фиктивными данными — вопросами и передается в эту форму.
Примечание. Раньше я также пытался разложить отношение ManyToMany в Request — RequestChoice как RequestAnwer с bool as пользователь отметил или нет выбор и заранее сгенерировал все ответы на вопрос «Выбор выбора». Но проблема с группировкой вариантов по вопросам тоже существовала, поэтому мне тоже не удалось заставить ее работать.

Подробнее здесь: https://stackoverflow.com/questions/715 ... th-choices
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Страница перезагрузки плагина WordPress Form Form Form
    Anonymous » » в форуме Jquery
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Страница перезагрузки плагина WordPress Form Form Form
    Anonymous » » в форуме Javascript
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Страница перезагрузки плагина WordPress Form Form Form
    Anonymous » » в форуме Jquery
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Изотопный фильтр с флажком или выбор опций с несколькими вариантами выбора
    Гость » » в форуме Jquery
    0 Ответы
    36 Просмотры
    Последнее сообщение Гость
  • Как получить все поля с вариантами выбора в модели Django?
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»