0

我创建了一个表单,当我将它发送到服务器时,我收到一个内部服务器错误,因为存在不允许的空字段。但我想知道,因为我使用以下代码检查表单,因此通常应该跳过数据库操作。可能是什么原因?

控制器:

public function newAction(Request $request) {

    $objTrip = new Trip();
    $objForm = $this->createForm(new TripType, $objTrip);

    if ($request->isMethod('POST')) {
        $objForm->bind($request);

        if ($objForm->isValid()) {
            $objEm = $this->getDoctrine()->getManager();
            $objEm->persist($objTrip);
            $objEm->flush();

            $response = new Response(json_encode(array('success' => true)));
            $response->headers->set('Content-Type', 'application/json');
            return $response;
        }

        // Es traten Fehler auf
        $arrErrors = array();
        foreach($objForm as $objField) {

            if($objField->hasErrors())
                foreach($objField->getErrors() as $objError)
                    $arrErrors[] = array($objField->var['id'] => $objError->getMessage());
        }
        $response = new Response(json_encode(array('success' => false, 'errors' => $arrErrors)));
        $response->headers->set('Content-Type', 'application/json');
        return $response;
    }

    return array('form' => $objForm->createView());
}

实体:

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

/**
 * @ORM\Column(type="string", length=100)
 * @Assert\MinLength(
 *     limit=3
 * )
 */
protected $startLocation;

/**
 * @ORM\Column(type="string", length=100)
 */
protected $endLocation;

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

/**
 * @ORM\Column(type="decimal", scale=2)
 */
protected $price;
4

4 回答 4

2

@Gerrit,嗨,看起来你没有使用 NotBlank 约束。MinLength 跳过空值。

于 2012-10-26T09:51:27.027 回答
0
 /**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string", length=100)
 * @Assert\MinLength(
 *     limit=3
 * )
 */
protected $startLocation;

/**
 * @ORM\Column(type="string", length=100)
 */
protected $endLocation;

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

/**
 * @ORM\Column(type="decimal", scale=2)
 */
protected $price;
于 2012-10-26T09:32:10.327 回答
0

当您获得实体中不存在的表单类型字段时,通常会出现您提到的错误。

你能因此也向我们展示 FormType 吗?

于 2012-10-26T13:32:17.077 回答
0

@Flask,不仅-对我来说,通常会出现内部异常,因为我不会为 notnull 字段设置正确的(例如)NotBlank 验证器并关闭 html5 验证或进行功能测试),但 ofc 很适合查看 FormType :)

顺便提一句。(对不起offtop)我只能评论我自己的答案是否正常?

于 2012-10-26T16:11:01.777 回答