php – 将问卷与表单中的用户实体相结合 – symfony2
发布时间:2020-12-13 13:03:21 所属栏目:PHP教程 来源:网络整理
导读:我需要在我的注册表中添加多项选择题的问卷.问题和选项分为两个实体: ?phpnamespace MeUserBundleEntity;use DoctrineORMMapping as ORM;use DoctrineCommonCollectionsArrayCollection;/** * Question * * @ORMTable(name="question") * @ORMEnti
我需要在我的注册表中添加多项选择题的问卷.问题和选项分为两个实体:
<?php namespace MeUserBundleEntity; use DoctrineORMMapping as ORM; use DoctrineCommonCollectionsArrayCollection; /** * Question * * @ORMTable(name="question") * @ORMEntity(repositoryClass="MeUserBundleEntityQuestionRepository") */ class Question { /** * @var integer * * @ORMColumn(name="id",type="integer") * @ORMId * @ORMGeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORMColumn(name="questionText",type="text") */ private $questionText; /** * @var boolean $expanded * * @ORMColumn(name="expanded",type="boolean") */ private $expanded; /** * @var boolean $multiple * * @ORMColumn(name="multiple",type="boolean") */ private $multiple; /** * @var Questionnaire $questionnaire * * @ORMManyToOne(targetEntity="Questionnaire",inversedBy="questions") * @ORMJoinColumn(name="questionnaire",referencedColumnName="id",onDelete="cascade") */ private $questionnaire; /** * @var DoctrineCommonCollectionsArrayCollection $options * * @ORMOneToMany(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 MeUserBundleEntityQuestionnaire $questionnaire */ public function setQuestionnaire($questionnaire) { $this->questionnaire = $questionnaire; } /** * @return MeUserBundleEntityQuestionnaire */ public function getQuestionnaire() { return $this->questionnaire; } } 和 <?php namespace MeUserBundleEntity; use DoctrineORMMapping as ORM; /** * QuestionOption * * @ORMTable(name="option") * @ORMEntity(repositoryClass="MeUserBundleEntityOptionRepository") */ class Option { /** * @var integer * * @ORMColumn(name="id",type="integer") * @ORMId * @ORMGeneratedValue(strategy="AUTO") */ private $id; /** * @var integer * * @ORMColumn(name="questionId",type="integer") */ private $questionId; /** * @var string * * @ORMColumn(name="optionText",type="string",length=255) */ private $optionText; /** * @ORMManyToOne(targetEntity="Question",inversedBy="options") * @ORMJoinColumn(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 MeUserBundleEntity; use DoctrineORMMapping as ORM; use DoctrineCommonCollectionsArrayCollection; /** * User * * @ORMTable(name="user") * @ORMEntity(repositoryClass="MeUserBundleEntityUserRepository") */ class User { /** * @var integer * * @ORMColumn(name="id",type="integer") * @ORMId * @ORMGeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORMColumn(name="firstName",length=50) */ private $firstName; /** * @var string * * @ORMColumn(name="middleInitial",length=50) */ private $middleInitial; /** * @var string * * @ORMColumn(name="lastName",length=50) */ private $lastName; /** * @var string * * @ORMColumn(name="homePhoneArea",length=3) */ private $homePhoneArea; /** * @var string * * @ORMColumn(name="homePhoneNumber",length=7) */ private $homePhoneNumber; /** * @var string * * @ORMColumn(name="email",length=50) */ private $email; /** * @var DoctrineCommonCollectionsArrayCollection */ 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 DoctrineCommonCollectionsArrayCollection */ 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 MeUserBundleForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolverInterface; 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |