Я хотел бы получить ваши советы по созданию формуляра.У меня есть сущность пользователя.Для каждого пользователя у меня есть связанные встречи.Пока у меня все под контролем.У каждой встречи есть дата, название, увиденное лицо и краткое резюме встречи.Теперь я хотел добавить анкету для каждого из моих пользователей в следующем формате: Категория 1> Категория 2> Категория 3> Вопросы> Ответы.
Существует 3 темы для категории 1 и разное количество тем для каждой категории.Каждая категория и вопрос одинаковы для каждого пользователя.Только ответы отличаются для пользователей.
Затем я создал разные объекты (Cat1, Cat2, Cat3, Вопросы и ответы).Я подумал, что будет проще, если я захочу добавить категорию, чтобы поступить так.Тем не менее, я изо всех сил стараюсь сделать мой формуляр для каждого пользователя.Если ответы существуют, они появляются перед правильным вопросом, но для вопросов, где нет ответов, нет «пустой» текстовой области.Вот мой код:
Cat1.php:
<?php
namespace MYAPP\AppliBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Cat1
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="MYAPP\AppliBundle\Entity\Cat1Repository")
*/
class Cat1
{
const CATEGORY1 = 'Cat1';
const CATEGORY2 = 'Cat2';
const CATEGORY3 = 'Cat3';
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=255, nullable=true)
*/
private $type = self::CATEGORY1;
/**
* @ORM\OneToMany(targetEntity="MYAPP\AppliBundle\Entity\Cat2", cascade={"all"}, mappedBy="cat1")
*/
private $cat2;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getType()
{
return $this->type;
}
/**
* @param string $type
*
* @return $this
*/
public function setType($type)
{
$this->type = $type;
return $this;
}
/**
* Constructor
*/
public function __construct()
{
$this->cat2 = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add cat2
*
* @param \MYAPP\AppliBundle\Entity\Cat2 $cat2
* @return Cat1
*/
public function addCat2(\MYAPP\AppliBundle\Entity\Cat2 $cat2)
{
$this->cat2[] = $cat2;
return $this;
}
/**
* Remove cat2
*
* @param \MYAPP\AppliBundle\Entity\Cat2 $cat2
*/
public function removeCat2(\MYAPP\AppliBundle\Entity\Cat2 $cat2)
{
$this->cat2->removeElement($cat2);
}
/**
* Get cat2
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCat2()
{
return $this->cat2;
}
}
Вот мой Cat2.php (Cat3 совершенно идентичен)
<?php
MYAPP\AppliBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Cat2
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="MYAPP\AppliBundle\Entity\Cat2Repository")
*/
class Cat2
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=255, nullable=true)
*/
private $type ;
/**
* @ORM\ManyToOne(targetEntity="MYAPP\AppliBundle\Entity\Cat1", cascade={"persist"}, inversedBy="cat2")
*/
private $cat1;
/**
* @ORM\OneToMany(targetEntity="MYAPP\AppliBundle\Entity\Cat3", cascade={"all"}, mappedBy="cat2")
*/
private $cat3;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set cat1
*
* @param \MYAPP\AppliBundle\Entity\Cat1 $cat1
* @return Cat2
*/
public function setCat1(\MYAPP\AppliBundle\Entity\Cat1 $cat1 = null)
{
$this->cat1 = $cat1;
return $this;
}
/**
* Get cat1
*
* @return \MYAPP\AppliBundle\Entity\Cat1
*/
public function getCat1()
{
return $this->cat1;
}
/**
* Constructor
*/
public function __construct()
{
$this->cat3 = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add cat3
*
* @param \MYAPP\AppliBundle\Entity\Cat3 $cat3
* @return Cat2
*/
public function addCat3(\MYAPP\AppliBundle\Entity\Cat3 $cat3)
{
$this->cat3[] = $cat3;
return $this;
}
/**
* Remove cat3
*
* @param \MYAPP\AppliBundle\Entity\Cat3 $cat3
*/
public function removeCat3(\MYAPP\AppliBundle\Entity\Cat3 $cat3)
{
$this->cat3->removeElement($cat3);
}
/**
* Get cat3
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getCat3()
{
return $this->cat3;
}
/**
* Set type
*
* @param string $type
* @return Cat2
*/
public function setType($type)
{
$this->type = $type;
return $this;
}
/**
* Get type
*
* @return string
*/
public function getType()
{
return $this->type;
}
}
Вот мои вопросы.php entity:
<?php
namespace MYAPP\AppliBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Questions
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="MYAPP\AppliBundle\Entity\QuestionsRepository")
*/
class Questions
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="text", type="string", length=255, nullable=true)
*/
private $text ;
/**
* @ORM\ManyToOne(targetEntity="MYAPP\AppliBundle\Entity\Cat3", cascade={"persist"}, inversedBy="questions")
*/
private $cat3;
/**
* @ORM\OneToMany(targetEntity="MYAPP\AppliBundle\Entity\Answers", cascade={"all"}, mappedBy="questions")
*/
private $answers;
/**
* Tostring method
*
*/
public function __toString()
{
return $this->text;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set cat3
*
* @param \MYAPP\AppliBundle\Entity\Cat3 $cat3
* @return Questions
*/
public function setCat3(\MYAPP\AppliBundle\Entity\Cat3 $cat3 = null)
{
$this->cat3 = $cat3;
return $this;
}
/**
* Get cat3
*
* @return \MYAPP\AppliBundle\Entity\Cat3
*/
public function getCat3()
{
return $this->cat3;
}
/**
* Constructor
*/
public function __construct()
{
$this->answers = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add answers
*
* @param \MYAPP\AppliBundle\Entity\Answers $answers
* @return Questions
*/
public function addAnswer(\MYAPP\AppliBundle\Entity\Answers $answers)
{
$this->answers[] = $answers;
return $this;
}
/**
* Remove answers
*
* @param \MYAPP\AppliBundle\Entity\Answers $answers
*/
public function removeAnswer(\MYAPP\AppliBundle\Entity\Answers $answers)
{
$this->answers->removeElement($answers);
}
/**
* Get answers
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getAnswers()
{
return $this->answers;
}
/**
* Set text
*
* @param string $text
* @return Questions
*/
public function setText($text)
{
$this->text = $text;
return $this;
}
/**
* Get text
*
* @return string
*/
public function getText()
{
return $this->text;
}
}
и мой ответный объект:
<?php
namespace MYAPP\AppliBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Answers
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="MYAPP\AppliBundle\Entity\AnswersRepository")
*/
class Answers
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="text", type="string", length=255, nullable=true)
*/
private $text ;
/**
* @ORM\ManyToOne(targetEntity="MYAPP\AppliBundle\Entity\Questions", cascade={"persist"}, inversedBy="answers")
*/
private $questions;
/**
* @ORM\ManyToOne(targetEntity="MYAPP\AppliBundle\Entity\User", cascade={"persist"}, inversedBy="answers")
*/
private $user;
/**
* Tostring method
*
*/
public function __toString()
{
return $this->text;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set text
*
* @param string $text
* @return Answers
*/
public function setText($text)
{
$this->text = $text;
return $this;
}
/**
* Get text
*
* @return string
*/
public function getText()
{
return $this->text;
}
/**
* Set questions
*
* @param \MYAPP\AppliBundle\Entity\Questions $questions
* @return Answers
*/
public function setQuestions(\MYAPP\AppliBundle\Entity\Questions $questions = null)
{
$this->questions = $questions;
return $this;
}
/**
* Get questions
*
* @return \MYAPP\AppliBundle\Entity\Questions
*/
public function getQuestions()
{
return $this->questions;
}
/**
* Set user
*
* @param \MYAPP\AppliBundle\Entity\User $user
* @return Answers
*/
public function setUser(\MYAPP\AppliBundle\Entity\User $user= null)
{
$this->user= $user;
return $this;
}
/**
* Get user
*
* @return \MYAPP\AppliBundle\Entity\User
*/
public function getUser()
{
return $this->user;
}
}
Наконец, здесь мой user.html.twig, где я хотел бы отобразить эту формулярную форму, чтобы пользователи могли ее заполнить:
{% for cat1 in Cat1 %}
<div class="col-md-12 Cat1">
{{ cat1.type}}
{% for cat2 in Cat2 %}
{% if cat2.cat1 == cat1 %}
<div class="col-md-12 Cat2">
{{ cat2.type}}
{% for cat3 in Cat3 %}
{% if cat3.cat2 == cat2 %}
<div class="col-md-12 Cat3">
{{ cat3.type}}
{% for questions in Questions %}
{% if questions.cat3 == cat3 %}
<div class="col-md-12 Questions">
{{ questions.text }}
{% for answers in form.answers %}
{% if answers.Questions.vars.value == questions.id %}
{{ form_widget(answers.text,{'attr':{'class': 'chosen' }}) }}
{% else %}
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endfor %}
</div>
{% endfor %}
Возможно, я делаю это неправильно (и, скорее всего, так), поэтому любая помощь будет очень полезной!
Большое спасибо!