Symfony REST API - 如何处理无效表单
Symfony REST API - how to handle invalid form
Symfony 4 作为后端,Angular 作为前端。我有一个简单的表格 - 假设两个字段不能为空。
实体:
/**
* @var string
*
* @ORM\Column(name="signature", type="string", length=32, unique=true)
* @JMSSerializer\Expose
*/
private $signature;
/**
* @var int
*
* @ORM\Column(name="status", type="integer")
* @JMSSerializer\Expose
*/
private $status;
因此默认值为 NOT NULL。
将其中一个字段留空并提交表单后,我收到 500 错误。 Dev.log 说:"Integrity constraint violation: 1048 Column 'status' cannot be null"。明显地。但是如何捕获这个错误呢?或者可能只是阻止提交 Angular 侧有空白字段的表单?
我的控制器:
public function postAction(Request $request)
{
$form = $this->createForm('App\Form\ItemType', null, [
'csrf_protection' => false,
]);
$form->submit($request->request->all());
if (!$form->isValid()) {
return $form;
}
...
按照其他地方的建议,我可以发送一系列错误:
$errors = [];
foreach ($form->getErrors(true) as $error) {
if ($error->getOrigin()) {
$errors[$error->getOrigin()->getName()][] = $error->getMessage();
}
}
但从未调用 isValid() 方法。
BTW) 在这种情况下,return 表单作为响应是个好主意吗?我在一些教程中看到过这个。但也许 returning
new View(null, Response::HTTP_BAD_REQUEST)
加上一些额外的信息会是更好的选择吗?
你好@Tompo,如果你想使用表单进行验证,你需要在你的实体中这样做
use Symfony\Component\Validator\Constraints as Assert;
/**
* @var string
*
* @ORM\Column(name="signature", type="string", length=32, unique=true)
* @Assert\NotBlank(message="Please enter a signature")
* @JMSSerializer\Expose
*/
private $signature;
/**
* @var int
*
* @ORM\Column(name="status", type="integer")
* @Assert\NotBlank(message="Please enter a status")
* @JMSSerializer\Expose
*/
private $status;
现在你可以在文件为空时接到电话,之后你需要编辑你的控制器以显示错误消息
Symfony 4 作为后端,Angular 作为前端。我有一个简单的表格 - 假设两个字段不能为空。
实体:
/**
* @var string
*
* @ORM\Column(name="signature", type="string", length=32, unique=true)
* @JMSSerializer\Expose
*/
private $signature;
/**
* @var int
*
* @ORM\Column(name="status", type="integer")
* @JMSSerializer\Expose
*/
private $status;
因此默认值为 NOT NULL。
将其中一个字段留空并提交表单后,我收到 500 错误。 Dev.log 说:"Integrity constraint violation: 1048 Column 'status' cannot be null"。明显地。但是如何捕获这个错误呢?或者可能只是阻止提交 Angular 侧有空白字段的表单?
我的控制器:
public function postAction(Request $request)
{
$form = $this->createForm('App\Form\ItemType', null, [
'csrf_protection' => false,
]);
$form->submit($request->request->all());
if (!$form->isValid()) {
return $form;
}
...
按照其他地方的建议,我可以发送一系列错误:
$errors = [];
foreach ($form->getErrors(true) as $error) {
if ($error->getOrigin()) {
$errors[$error->getOrigin()->getName()][] = $error->getMessage();
}
}
但从未调用 isValid() 方法。
BTW) 在这种情况下,return 表单作为响应是个好主意吗?我在一些教程中看到过这个。但也许 returning
new View(null, Response::HTTP_BAD_REQUEST)
加上一些额外的信息会是更好的选择吗?
你好@Tompo,如果你想使用表单进行验证,你需要在你的实体中这样做
use Symfony\Component\Validator\Constraints as Assert;
/**
* @var string
*
* @ORM\Column(name="signature", type="string", length=32, unique=true)
* @Assert\NotBlank(message="Please enter a signature")
* @JMSSerializer\Expose
*/
private $signature;
/**
* @var int
*
* @ORM\Column(name="status", type="integer")
* @Assert\NotBlank(message="Please enter a status")
* @JMSSerializer\Expose
*/
private $status;
现在你可以在文件为空时接到电话,之后你需要编辑你的控制器以显示错误消息