我对奏鸣曲管理包很陌生,我可以使用一些帮助。
问题:
我有一个测验实体、一个问题实体、一个答案实体。
测验和问题之间的关系:一对多。
测验实体
/**
* @ORM\OneToMany(targetEntity="Question", mappedBy="quiz", cascade={"persist", "remove"})
*/
protected $questions;
问题实体
/**
* @ORM\ManyToOne(targetEntity="Quiz", inversedBy="questions", cascade={"persist"})
* @ORM\JoinColumn(name="quiz_id", referencedColumnName="id", nullable = false)
*/
protected $quiz;
关系问答:一对多。
问题实体
/**
* @ORM\OneToMany(targetEntity="Answer", mappedBy="question", cascade={"persist", "remove"})
*/
protected $answers;
回答实体
/**
* @ORM\ManyToOne(targetEntity="Question", inversedBy="answers")
* @ORM\JoinColumn(name="question_id", referencedColumnName="id")
*/
protected $question;
我需要一个表格,我可以在其中添加多个问题到一个课程中,每个问题可以有一个或多个答案,这些答案也应该有一个真假标志。
所以基本上我需要这样的东西: 模型
到目前为止,我设法只添加了来自管理员的多个问题。实际上,在几个版本之前(奏鸣曲管理和学说),我的问题和答案都在工作。但是现在我只能添加多个问题,而无法添加任何答案。
这是我的 QuestionType 类:
<?php
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class QuestionType extends AbstractType {
public function buildForm( FormBuilderInterface $builder, array $options )
{
$builder
->add('text', 'text', array( 'required' => false, 'label' => 'question' ) )
->add('answers', 'collection', array(
'type' => new AnswerType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'delete_empty' => true,
'cascade_validation' => false,
'label' => 'Answers',
'options' => array( 'label' => false ),
'label_attr' => array( 'class' => 'answers' ),
));
}
public function getName()
{
return 'questions';
}
public function setDefaultOptions( OptionsResolverInterface $resolver )
{
$resolver->setDefaults( array(
'data_class' => MyBundle\CoreBundle\Entity\Question',
));
}
}
这是我的 AnswerType 类:
<?php
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class AnswerType extends AbstractType {
public function buildForm( FormBuilderInterface $builder, array $options )
{
$builder
->add('text', 'text', array( 'required' => true, 'label' => 'answer' ) )
->add('correct', 'checkbox', array( 'required' => false ) );
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'answers';
}
public function setDefaultOptions( OptionsResolverInterface $resolver )
{
$resolver->setDefaults( array(
'data_class' => 'MyBundle\CoreBundle\Entity\Answer',
));
}
}
这是我的 QuizAdmin 课程:
<?php
use MyBundle\CoreBundle\Form\QuestionType;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection;
class QuizAdmin extends Admin
{
// Fields to be shown on create/edit forms
protected function configureFormFields( FormMapper $formMapper )
{
$formMapper
->add('title', 'text', array( 'label' => 'Quiz Title' ) )
->add('description', 'textarea', array( 'label' => 'Quiz Description' ) )
->add('private', 'checkbox', array('required' => false ) )
->add('questions', 'collection', array(
'type' => new QuestionType(),
'allow_add' => true,
'allow_delete' => true,
'cascade_validation' => false,
'by_reference' => false,
'delete_empty' => true,
'options' => array( 'label' => false ),
));
}
// Fields to be shown on filter forms
protected function configureDatagridFilters( DatagridMapper $datagridMapper )
{
$datagridMapper
->add( 'title' );
}
// Fields to be shown on lists
protected function configureListFields( ListMapper $listMapper )
{
$listMapper
->addIdentifier( 'title' );
}
}
我也尝试过使用 sonata_type_collection 但它不起作用它返回此错误:“当前字段“问题”未链接到管理员。请为目标实体创建一个“我已经查找并尝试了所有建议在stackoverflow上,但我无法让它工作。我非常感谢您对此事的任何建议。
这就是测验的管理页面目前看起来像问题和答案:
正如我在运行 composer.phar update 之前的几个版本之前提到的那样,我可以同时添加问题和答案(我不记得版本,但后来我遇到了一些独特字段的其他问题,我很高兴得到了修复,但现在我有这个问题)。
如果您有任何建议,我很乐意遵循。
谢谢!