Рекомендация для создания формул - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы получить ваши советы по созданию формуляра.У меня есть сущность пользователя.Для каждого пользователя у меня есть связанные встречи.Пока у меня все под контролем.У каждой встречи есть дата, название, увиденное лицо и краткое резюме встречи.Теперь я хотел добавить анкету для каждого из моих пользователей в следующем формате: Категория 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 %}

Возможно, я делаю это неправильно (и, скорее всего, так), поэтому любая помощь будет очень полезной!

Большое спасибо!

...