PHP   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – 将问卷与表单中的用户实体相结合 – symfony2大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在我的注册表中添加多项选择题的问卷.问题和选项分为两个实体
<?php

namespace Me\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Question
 *
 * @ORM\Table(name="question")
 * @ORM\Entity(repositoryClass="Me\UserBundle\Entity\QuestionRepository")
 */
class Question
{
/**
 * @var Integer
 *
 * @ORM\column(name="id",type="Integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var String
 *
 * @ORM\column(name="questiontext",type="text")
 */
private $questiontext;

/**
 * @var Boolean $expanded
 *
 * @ORM\column(name="expanded",type="Boolean")
 */
private $expanded;

/**
 * @var Boolean $multiple
 *
 * @ORM\column(name="multiple",type="Boolean")
 */
private $multiple;

/**
 * @var Questionnaire $questionnaire
 *
 * @ORM\ManyToOne(targetEntity="Questionnaire",inversedBy="questions")
 * @ORM\Joincolumn(name="questionnaire",referencedcolumnName="id",ondelete="cascade")
 */
private $questionnaire;

/**
 * @var \Doctrine\Common\Collections\ArrayCollection $options
 *
 * @ORM\OneToMany(targetEntity="Option",mappedBy="question",cascade={"all"})
 */
private $options;

public function __construct()
{
    $this->expanded = false;
    $this->multiple = false;

    $this->options = new ArrayCollection();
}


/**
 * Get id
 *
 * @return Integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set questiontext
 *
 * @param String $questiontext
 * @return Question
 */
public function setQuestiontext($questiontext)
{
    $this->questiontext = $questiontext;

    return $this;
}

/**
 * Get questiontext
 *
 * @return String 
 */
public function getQuestiontext()
{
    return $this->questiontext;
}

/**
 * @param mixed $options
 */
public function setOptions($options)
{
    $this->options[] = $options;

    return $this;

}

/**
 * @return mixed
 */
public function getOptions()
{
    return $this->options;
}

function __toString()
{
    return $this->getQuestiontext();
}

/**
 * @param Boolean $expanded
 */
public function setExpanded($expanded)
{
    $this->expanded = $expanded;
}

/**
 * @return Boolean
 */
public function getExpanded()
{
    return $this->expanded;
}

/**
 * @param Boolean $multiple
 */
public function setMultiple($multiplE)
{
    $this->multiple = $multiple;
}

/**
 * @return Boolean
 */
public function getMultiple()
{
    return $this->multiple;
}

/**
 * @param \Me\UserBundle\Entity\Questionnaire $questionnaire
 */
public function setQuestionnaire($questionnairE)
{
    $this->questionnaire = $questionnaire;
}

/**
 * @return \Me\UserBundle\Entity\Questionnaire
 */
public function getQuestionnaire()
{
    return $this->questionnaire;
}


}

<?php

namespace Me\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * QuestionOption
 *
 * @ORM\Table(name="option")
 * @ORM\Entity(repositoryClass="Me\UserBundle\Entity\OptionRepository")
 */
class Option
{
/**
 * @var Integer
 *
 * @ORM\column(name="id",type="Integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var Integer
 *
 * @ORM\column(name="questionId",type="Integer")
 */
private $questionId;

/**
 * @var String
 *
 * @ORM\column(name="optiontext",type="String",length=255)
 */
private $optiontext;

/**
 * @ORM\ManyToOne(targetEntity="Question",inversedBy="options")
 * @ORM\Joincolumn(name="questionId",ondelete="cascade")
 **/
private $question;

/**
 * Get id
 *
 * @return Integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set optiontext
 *
 * @param String $optiontext
 * @return Option
 */
public function setOptiontext($optiontext)
{
    $this->optiontext = $optiontext;

    return $this;
}

/**
 * Get optiontext
 *
 * @return String 
 */
public function getOptiontext()
{
    return $this->optiontext;
}

/**
 * @return mixed
 */
public function getQuestion()
{
    return $this->question;
}

/**
 * @param mixed $question
 */
public function setQuestion($question)
{
    $this->question = $question;
}

/**
 * @param int $id
 */
public function setId($id)
{
    $this->id = $id;
}

function __toString()
{
    return $this->getOptiontext();
}
}

我也有一个问卷调查实体,然我不认为我真的需要它,因为用户不会创建调查问卷,只会在注册时填写单个问卷.

我的用户实体:

<?php

namespace Me\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="Me\UserBundle\Entity\UserRepository")
 */
class User
{
/**
 * @var Integer
 *
 * @ORM\column(name="id",type="Integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var String
 *
 * @ORM\column(name="firstName",length=50)
 */
private $firstName;

/**
 * @var String
 *
 * @ORM\column(name="middleInitial",length=50)
 */
private $middleInitial;

/**
 * @var String
 *
 * @ORM\column(name="lastName",length=50)
 */
private $lastName;

/**
 * @var String
 *
 * @ORM\column(name="homePhoneArea",length=3)
 */
private $homePhoneArea;

/**
 * @var String
 *
 * @ORM\column(name="homePhonenumber",length=7)
 */
private $homePhonenumber;

/**
 * @var String
 *
 * @ORM\column(name="email",length=50)
 */
private $email;

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 */
public $questions;

public function __construct()
{
    $this->questions = new ArrayCollection();
}

/**
 * Get id
 *
 * @return Integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set firstName
 *
 * @param String $firstName
 * @return User
 */
public function setFirstName($firstName)
{
    $this->firstName = $firstName;

    return $this;
}

/**
 * Get firstName
 *
 * @return String 
 */
public function getFirstName()
{
    return $this->firstName;
}

/**
 * Set middleInitial
 *
 * @param String $middleInitial
 * @return User
 */
public function setMiddleInitial($middleInitial)
{
    $this->middleInitial = $middleInitial;

    return $this;
}

/**
 * Get middleInitial
 *
 * @return String 
 */
public function getMiddleInitial()
{
    return $this->middleInitial;
}

/**
 * Set lastName
 *
 * @param String $lastName
 * @return User
 */
public function setLastName($lastName)
{
    $this->lastName = $lastName;

    return $this;
}

/**
 * Get lastName
 *
 * @return String 
 */
public function getLastName()
{
    return $this->lastName;
}

/**
 * Set homePhoneArea
 *
 * @param String $homePhoneArea
 * @return User
 */
public function setHomePhoneArea($homePhoneArea)
{
    $this->homePhoneArea = $homePhoneArea;

    return $this;
}

/**
 * Get homePhoneArea
 *
 * @return String 
 */
public function getHomePhoneArea()
{
    return $this->homePhoneArea;
}

/**
 * Set homePhonenumber
 *
 * @param String $homePhonenumber
 * @return User
 */
public function setHomePhonenumber($homePhonenumber)
{
    $this->homePhonenumber = $homePhonenumber;

    return $this;
}

/**
 * Get homePhonenumber
 *
 * @return String 
 */
public function getHomePhonenumber()
{
    return $this->homePhonenumber;
}


/**
 * Set email
 *
 * @param String $email
 * @return User
 */
public function setEmail($email)
{
    $this->email = $email;

    return $this;
}

/**
 * Get email
 *
 * @return String 
 */
public function getEmail()
{
    return $this->email;
}



/**
 * @return \Doctrine\Common\Collections\ArrayCollection
 */
public function getQuestions()
{
    return $this->questions;
}


}

我的用户控制器:

public function newAction()
{
    $user = new User();

    $em = $this->getDoctrine()->getManager();

    $questions = $em->getRepository('MeUserBundle:Question')->findAll();



    if (!$questions) {
        throw $this->createNotFoundException('Unable to find Questions.');
    }

    $builder = $this->createFormBuilder();

    $optionEntities = array();
    foreach ($questions as $question)
    {
        $options = array();
        foreach ($question->getOptions() as $option)
        {
            $options[$option->getId()] = $option->getOptiontext();
            $optionEntities[$option->getId()] = $option;
        }
        $builder->add('question_'. $question->getId(),'choice',array(
            'label' => $question->getQuestiontext(),'expanded' => $question->getExpanded(),'multiple' => $question->getMultiple(),'choices' => $options
        ));
    }

    $user->getQuestions()->add($questions);

    $form = $this->createForm(new MyFormType(),array('User' => $user));

    return $this->render('MeUserBundle:User:new.html.twig',array(
        'entity' => $user,'form'   => $form->createView(),));
}

今天的表单类型:

<?php

namespace Me\UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class MyFormType extends AbstractType
{
protected $questions;

public function __construct( $questions)
{
    $this->questions = $questions;
}

public function buildForm(FormBuilderInterface $builder,array $options)
{

    $builder
        ->add('questions','collection',array(
            'type' => new QuestionType()
        ))
        ->add('firstName')
        ->add('middleInitial')
        ->add('lastName')
        ->add('homePhoneArea')
        ->add('homePhonenumber')
        ->add('email')
    ;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(

    ));
}

public function getName()
{
    return 'myform_type';
}
}

此设置无法获取问题及其相关选项,并在同一用户创建表单中显示.我已经看到了组合表单的说明和文档,但没有使用这种配置创建表单.任何指导将不胜感激.

解决方法

您的用户实体需要与您应该存储在用户实体的$answers-field中的$答案的关系,(查找“嵌入集合”)

然后在您的控制器中,通过$user-> setAnswers(value)消化表单存储您的值,然后您将在用户实体的$answers字段($user-> getAnswers())中找到答案值.

并且不要忘记添加你的getter和setter.

$php app / console doctrine:generate:entities Bundlename:Entityname

大佬总结

以上是大佬教程为你收集整理的php – 将问卷与表单中的用户实体相结合 – symfony2全部内容,希望文章能够帮你解决php – 将问卷与表单中的用户实体相结合 – symfony2所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。