【发布时间】:2016-08-02 21:41:02
【问题描述】:
我正在开发一个基于 MCQ 的测验系统,我的目标是帮助老师在同一页面上为该问题添加新的问题和选择。根据 Symfony 文档,我可以嵌入 Collection of Forms,所以我尝试将 ChoiceType 嵌入到问题表单中:
->add('answers', CollectionType::class, array(
'entry_type' => ChoiceType::class,
'allow_add' => true,
));
;
new.html.twig 页面代码(新问题):
<label> Choose answers : </label>
<ul class="tags" data-prototype="{{form_widget(form.answers.vars.prototype)|e('html_attr') }}">
</ul>
但是我在浏览器中得到了空的选择输入。请提出这方面的完美解决方案?
注意:
我注意到如果我添加
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
对于我的 QuestionType,我在 new.html.twig 中得到一个空选择的表单
当我删除此导入时,如果我打开 new.html.twig 会出现此错误:
Variable "expanded" does not exist in form_div_layout.html.twig at line 38
但我的实体中没有任何名为“扩展”的变量
选择实体
class Choice
{
...
/**
* @var string
*
* @ORM\Column(name="answer", type="text")
*/
private $answer;
/**
* @var string
*
* @ORM\Column(name="correct", type="string", length=255)
*/
private $correct;
/**
* @var
* @ORM\ManyToOne(targetEntity="ChallengeBundle\Entity\Question",inversedBy="answers")
*/
private $question;
...
}
问题实体:
class Question
{
...
/**
* @var
* @ORM\OneToMany(targetEntity="ChallengeBundle\Entity\Choice",mappedBy="question",cascade={"remove"})
*/
private $answers;
...
}
选择类型:
class ChoiceType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('answer')
->add('correct')
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ChallengeBundle\Entity\Choice'
));
}
}
【问题讨论】:
-
我有一个草稿系统。如果您对此感兴趣,请告诉我
-
为什么不使用Moodle,这方面最好的和最常用的平台?见amazing stats
-
使用 TextType 而不是 ChoiceType。你在正确的轨道上。
-
ChoiceType 是 Choice 实体的形式,谢谢 Jonny
-
当我添加 use Symfony\Component\Form\Extension\Core\Type\ChoiceType;对于我的问题类型,当我删除此导入时,我得到一个空选择的表单,因此它将调用选择实体的表单我收到此错误:第 38 行的 form_div_layout.html.twig 中不存在变量“扩展”,但我没有t 在我的实体中有任何变量称为“扩展”
标签: javascript php symfony twig