symfony表单存储数据的问题

时间:2015-11-18 14:50:01

标签: forms symfony

我开始学习Symfony2,我正在做一个输入日期的表格。当我尝试保存收到的日期时:

使用params [null,null]执行'INSERT INTO date(date,critical)VALUES(?,?)'时发生异常:

SQLSTATE [23000]:完整性约束违规:1048列“日期”不能为空。

课程日期在这里:

课程日期{

/**
 *
 * @ORM\Id
 *
 * @ORM\Column(type="integer")
 *
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id_date;

/**
 *
 * @ORM\Column(type = "date")
 */
protected $date;

/**
 *
 * @ORM\Column(name="critical", type="boolean")
 */
protected $critical;

/**
 *
 * @ORM\OneToMany(targetEntity = "Category", mappedBy ="date")
 */
protected $categories;

在表单类型中:

class DateType扩展AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('date');
    $builder->add('critical');
    $builder->add('save', 'submit');        
}

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

public function getCritical() {
    return 'critical';
}

public function getDefaultOptions(array $options) {
    return array(
        'data_class' => 'GuardBundle\Entity\Date',
    );
}

在控制器中:

public function gesDateAction(Request $request) {
    $date = new Date();
    $form = $this->createForm(new DateType(), $date);
    if ($request->getMethod() == 'POST') {
        $em = $this->getDoctrine()->getManager();
        $em->persist($date);
        $em->flush();
        return $this->render('GuardBundle:Dates:gesDates.html.twig', array(
                    'form' => $form->createView()));
    }
    return $this->render('GuardBundle:Fechas:gesDates.html.twig', array(
                'form' => $form->createView()));
}

在视图中:

<form action="ges_date" method="post" {{ form_enctype(form) }}>    
    <br>
    {{ form_row(form.date) }}
    {{ form_row(form.critical) }}
    {{ form_row(form.save) }}   
    <br>
</form>

请帮帮我,非常感谢你

2 个答案:

答案 0 :(得分:0)

你没有告诉表格去处理&#34;当前的要求。因此,您正在使用您的实体创建表单,然后检查请求方法是POST,然后直接跳转到持久化您的实体。它是您控制器的快速变化:

public function gesDateAction(Request $request) {
    $date = new Date();
    $form = $this->createForm(new DateType(), $date);
    if ($request->getMethod() == 'POST') {
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($date);
            $em->flush();
            return $this->render('GuardBundle:Dates:gesDates.html.twig', array(
                    'form' => $form->createView()));
        }
    }

    return $this->render('GuardBundle:Fechas:gesDates.html.twig', array(
            'form' => $form->createView()));
}

我还添加了一个$form->isValid()检查,就好像你向你的实体添加了约束一样,这将会捕获它们。

答案 1 :(得分:0)

问题似乎是你没有使用handleRequest():

请求处理 handleRequest()方法是在Symfony 2.3中引入的。 要处理表单数据,您需要调用handleRequest()方法:

1 $形式 - &GT;的handleRequest();

您可以找到有关以下内容的更多信息: http://symfony.com/doc/current/components/form/introduction.html