![](/img/trans.png)
[英]Symfony 3 - Doctrine 2 - orderBy on oneToMany relation does not work
[英]Form does not render fields of OneToMany relation in Symfony 4
我尝试用一对多的关系进行渲染,但是有些字段不渲染。
AnswerType
表格
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('text', TextType::class, array('attr' => array('class' => 'form-control'), 'label' => false))
->add('isCorrect', CheckboxType::class, array('attr' => array('class' => 'form-control'), 'label' => false))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Answer::class
]);
}
QuestionAnswerType
表单。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', EntityType::class, array(
'class' => Question::class,
'choice_label' => 'title',
));
$builder
->add('answers', CollectionType::class, array(
'entry_type' => AnswerType::class,
'entry_options' => array('label' => false),
'allow_add' => true,
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Question::class
]);
}
控制器片段。
$question = new Question();
$form1 = $this->createForm(QuestionAnswerType::class, $question);
$form1->handleRequest($request);
return $this->render('admin/admin.html.twig',[
'formAnswer' => $form1->createView(),
]);
实体Question
class Question
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="text")
*/
private $title;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Answer", mappedBy="question", orphanRemoval=true)
*/
private $answers;
public function __construct()
{
$this->answers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
/**
* @return Collection|Answer[]
*/
public function getAnswers(): Collection
{
return $this->answers;
}
public function addAnswer(Answer $answer): self
{
if (!$this->answers->contains($answer)) {
$this->answers[] = $answer;
$answer->setQuestion($this);
}
return $this;
}
public function removeAnswer(Answer $answer): self
{
if ($this->answers->contains($answer)) {
$this->answers->removeElement($answer);
if ($answer->getQuestion() === $this) {
$answer->setQuestion(null);
}
}
return $this;
}
}
实体Answer
class Answer
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="text")
*/
private $text;
/**
* @ORM\Column(type="boolean")
*/
private $is_correct;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="answers")
* @ORM\JoinColumn(nullable=false)
*/
private $question;
public function getId(): ?int
{
return $this->id;
}
public function getText(): ?string
{
return $this->text;
}
public function setText(string $text): self
{
$this->text = $text;
return $this;
}
public function getIsCorrect(): ?bool
{
return $this->is_correct;
}
public function setIsCorrect(bool $is_correct): self
{
$this->is_correct = $is_correct;
return $this;
}
public function getQuestion(): ?question
{
return $this->question;
}
public function setQuestion(?Question $question): self
{
$this->question = $question;
return $this;
}
}
在树枝上
<div class="tab-pane fade" id="answer" role="tabpanel" aria-labelledby="answer-tab">
{{ form_start(formAnswer) }}
{{ form_row(formAnswer.title) }}
<h3>Answers</h3>
<ul class="answers">
{% for answers in formAnswer.answers %}
<li>{{ form_row(answers.text) }}</li>
{% endfor %}
</ul>
{{ form_end(formAnswer) }}
</div>
它看起来像它的外观
表Answer
+-------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| question_id | int(11) | NO | MUL | NULL | |
| text | longtext | NO | | NULL | |
| is_correct | tinyint(1) | NO | | NULL | |
+-------------+------------+------+-----+---------+----------------+
PS最近,我问了很多关于symfony的问题,对不起。 我只想非常了解它。
渲染问题似乎是您的Question
缺少的Answer
实例。 反过来,您的表单不会呈现任何子表单,因为它没有要呈现的任何内容。 您可以通过添加答案实例来解决此问题,如下所示:
// First, the question
$question = new Question();
// Then, some answers
$question->addAnswer(new Answer());
$question->addAnswer(new Answer());
$question->addAnswer(new Answer());
// Lastly, the form
$form1 = $this->createForm(QuestionAnswerType::class, $question);
这应该够了吧...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.