简体   繁体   English

如何从Symfony 2.8中的EntityType字段获取特定值

[英]How to get specific value from EntityType Field in Symfony 2.8

I am new in Symfony and try to creating a simple form in Symfony and try to get the value from Database through EntityType Field but I can't get the value when I dump the submitted form data it shows object of EntityType Field. 我是Symfony的新手,并尝试在Symfony中创建一个简单的表单,并尝试通过EntityType Field数据库获取值,但是当我转储显示EntityType Field对象的提交表单数据时,我无法获取该值。

my code 我的代码

public function indexAction(Request $request)
{ 
    // user details
    if($this->getUser()){
        $user = $this->getUser()->getId();
    } else {
        $user = '';
    }

    $classarray = array(
    'School 1' => 1,
    'School 2' => 2,
    'School 3' => 3,
    );

    // create a class booking form
    $classbooking = new Classbooking();

    $classbooking->setUserId($user);

    $form = $this->createFormBuilder($classbooking)
    ->add('school',  ChoiceType::class, array(
    'choices'  => $classarray,
    // *this line is important*
    'choices_as_values' => true,
    'label' => 'Select School',
    'mapped' => false,
    ))
    ->add('class_id', EntityType::class, array(
        // query choices from this entity
        'class' => 'RoomBundle:Classlist',

        // use the User.username property as the visible option string
        'choice_label' => 'className',
        'choice_value' => 'id',

        // used to render a select box, check boxes or radios
        // 'multiple' => true,
        // 'expanded' => true,
    ))

    ->add('book_dt', TextType::class)
    ->add('purpose', TextType::class)
    ->add('numberStudents', IntegerType::class)
    ->add('save', SubmitType::class, array('label' => 'Book Now!'))
    ->getForm();

    $form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
    $classbooking = $form->getData();
    //print_r($classbooking); exit();

     $em = $this->getDoctrine()->getManager();
     $em->persist($classbooking);
     $em->flush();

    return $this->redirectToRoute('booking_success');
}

Classlist 班级清单

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="class_name", type="string", length=255)
 */
private $className;

/**
 * @var integer
 *
 * @ORM\Column(name="school_id", type="integer")
 */
private $schoolId;

/**
 * @var string
 *
 * @ORM\Column(name="slug", type="string", length=255)
 */
private $slug;

/**
 * @var integer
 *
 * @ORM\Column(name="status", type="integer")
 */
private $status;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="date_created", type="datetimetz")
 */
private $dateCreated;
public function __construct() {
    $this->dateCreated = new \DateTime('now');

}

Classbooking entity 课堂预订实体

   class Classbooking
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="class_id", type="integer")
     */
    private $classId;

    /**
     * @var integer
     *
     * @ORM\Column(name="user_id", type="integer")
     */
    private $userId;

    /**
     * @var string
     * @Assert\NotBlank()
     * @ORM\Column(name="purpose", type="string", length=255)
     */
    private $purpose;

    /**
     * @var integer
     * @Assert\NotBlank()
     * @ORM\Column(name="number_students", type="integer")
     */
    private $numberStudents;

    /**
     * @var \DateTime
     * 
     * @ORM\Column(name="book_dt", type="datetimetz")
     */
    private $bookDt;

    /**
     * @var integer
     *
     * @ORM\Column(name="status", type="integer")
     */
    private $status = 1;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date_created", type="datetimetz")
     */
    private $dateCreated;
    public function __construct() {
        $this->dateCreated = new \DateTime('now');

    }

My error 我的错误

An exception occurred while executing 'INSERT INTO Classbooking (class_id, user_id, purpose, number_students, book_dt, status, date_created) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [{}, 1849039287, "aaa", 5, "2018-02-28 00:00:00", 1, "2018-02-25 08:22:02"]: 使用参数[{},1849039287,“执行'INSERT INTO Classbooking(class_id,user_id,用途,number_students,book_dt,状态,创建日期)VALUES(?,?,?,?,?,?,?)时发生异常aaa“,5,” 2018-02-28 00:00:00“,1,” 2018-02-25 08:22:02“]:

Catchable Fatal Error: Object of class AYA\\Cocorico\\RoomBundle\\Entity\\Classlist could not be converted to string 可捕获的致命错误:AYA \\ Cocorico \\ RoomBundle \\ Entity \\ Classlist类的对象无法转换为字符串

The problem is with this part of the form: 问题在于表单的这一部分:

->add('class_id', EntityType::class, array(
    // query choices from this entity
    'class' => 'RoomBundle:Classlist',

    // use the User.username property as the visible option string
    'choice_label' => 'className',
    'choice_value' => 'id',

    // used to render a select box, check boxes or radios
    // 'multiple' => true,
    // 'expanded' => true,
))

In combination with this part of the entity: 结合实体的这一部分:

/**
 * @var integer
 *
 * @ORM\Column(name="class_id", type="integer")
 */
private $classId;

You have a property called classId , which expects an int, where you want to have the connect class or classes. 您有一个名为classId的属性,该属性需要一个int,在此您要具有一个或多个connect类。

You should change the property on the Entity to look something like this: 您应该将Entity的属性更改为如下所示:

/**
 * @var RoomBundle\Entity\Classlist
 *
 * @ORM\ManyToOne(targetEntity="RoomBundle\Entity\Classlist")
 */
private $classList;

The relationship might be off, for example you could have a ManyToMany or OneToMany-relationship. 该关系可能已关闭,例如您可能有一个ManyToMany或OneToMany关系。 For more details check the Doctrine documentation on assications: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html 有关更多详细信息,请参阅有关关联的Doctrine文档: http ://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

You will also have to update your schema after this change! 更改后,您还必须更新您的架构!

Now your form matches with the column type as it will provide an entity and doctrine expects an associated entity. 现在,您的表单与列类型匹配,因为它将提供一个实体,而学说期望一个关联的实体。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM