1

マルチリレーション (複数の依存する 1 対多のリレーション) フォームを機能させようとしていますが、うまくいきません。FOSUserbundle で Symfony 2.3 を使用しています。

エンティティ ユーザー

    use FOS\UserBundle\Entity\User as BaseUser;
    [...]

    /**
     * @ORM\Entity
     * @Gedmo\Loggable
     * @ORM\Table(name="ta_user", indexes={@ORM\Index(name="IDX_LOGIN_TOKEN", columns={"login_token"})})
     */
    class User extends BaseUser
    {
            [...]

        /**
         * @ORM\OneToMany(targetEntity="UserLifestyle", mappedBy="user", fetch="LAZY", cascade={"persist", "remove"})
         */
        protected $lifestyle;

ユーザーマネージャー

    use Doctrine\ORM\EntityManager;
    use FOS\UserBundle\Entity\UserManager as BaseUserManager;
    use Acme\UserBundle\Entity\LifestyleQuestion;
    use Acme\UserBundle\Entity\UserLifestyle;
    [...]

    class UserManager extends BaseUserManager {
        public function createUser() {
            $user = parent::createUser();
            $lifestyle = new UserLifestyle();
            $lifestyle->setQuestion($this->objectManager->getReference('Acme\UserBundle\Entity\LifestyleQuestion', 1));
            $user->addLifeStyle($lifestyle);
            $lifestyle = new UserLifestyle();
            $lifestyle->setQuestion($this->objectManager->getReference('Acme\UserBundle\Entity\LifestyleQuestion', 2));
            $user->addLifeStyle($lifestyle);
            $lifestyle = new UserLifestyle();
            $lifestyle->setQuestion($this->objectManager->getReference('Acme\UserBundle\Entity\LifestyleQuestion', 3));
            $user->addLifeStyle($lifestyle);
            return $user;
        }

エンティティ ユーザーライフ スタイル

    /**
     * @ORM\Entity
     * @Gedmo\Loggable
     * @ORM\Table(name="ta_user_lifestyle")
     */
    class UserLifestyle
    {
        /**
         * @ORM\Id
         * @ORM\Column(type="smallint")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;

        /**
         * @ORM\ManyToOne(targetEntity="User", inversedBy="lifestyle")
         * @ORM\JoinColumn(name="user_id")
         */
        protected $user;

        /**
         * @ORM\ManyToOne(targetEntity="LifestyleQuestion", inversedBy="answeredByUser")
         * @ORM\JoinColumn(name="question_id")
         */
        protected $question;

        /**
         * @ORM\ManyToOne(targetEntity="LifestyleAnswer", inversedBy="userAnswers")
         * @ORM\JoinColumn(name="answer_id")
         * @Gedmo\Versioned
         */
        protected $answer;

次に、フォームタイプがあります

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    use Doctrine\ORM\EntityRepository;

    class RegistrationType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('email', NULL, array('label' => 'E-Mail'))
                            [...]
                ->add('lifestyle', 'collection', array(
                    'type' => new RegistrationLifestyleType(),
                    'allow_add' => false,
                    'allow_delete' => false,
                    'label' => false,
                ))

そして今、関連があるはずRegistrationLifestyleTypeです。しかし、私はそれがどのように見えるべきか分かりません。私の登録フォームには 3 つの選択肢フィールドがあり、これらの質問に関連する質問 (ラベル) と一連の回答 (選択肢フィールド) が表示されると思います。UserManager は、新しく作成されたユーザーに 3 つの質問を割り当てるため、次の方法で質問を取得できます。

    $lifestyles = $user->getLifestyles();
    foreach ($lifestyles as $lifestyle) {
        $question = $lifestyle->getQuestion(); // echo $question->getQuestion();
        $answers = $lifestyle->getQuestion()->getAnswers(); // loop through $answers and echo $answer->getAnswer();
    }

しかし、これを機能させるために、フォームの種類を変更する方法を教えてください。重要: 私の意図は、組み込み機能を可能な限り使用し、サービス コンテナーとエンティティ マネージャーを注入することによってフォーム タイプなどの膨張を回避しようとすることです。

4

1 に答える 1