【发布时间】:2021-11-14 01:49:25
【问题描述】:
我正在尝试验证包含绝对不能为空或 null 的字段的表单。所以在我的模型中,它是这样定义的:
/**
* @var string
*/
private $end;
/**
* @param string $end
* @return Blabla
*/
public function setEnd(string $end): Blabla
{
$this->end = $end;
return $this;
}
这是我表单中该字段的验证:
$builder
->add('end', TextType::class, [
'label' => 'blabla',
'constraints' => [
new Length([
'min' => 3,
'minMessage' => 'Min {{ limit }} chars',
]),
new NotBlank([
'message' => 'not null blabla',
]),
],
])
这是我在每个示例“多个空格”发送错误输入时收到的错误:Expected argument of type "string", "null" given at property path "end".
我可以通过在我的 setter 中添加接收 null 的可能性来纠正此错误
/**
* @var string|null
*/
private $end;
/**
* @param string|null $end
* @return blabla
*/
public function setEnd(?string $end=null): blabla
{
$this->end = $end;
return $this;
}
但我发现允许字段接收 null 只是为了验证它并防止将字段设置为 null 值,这不是很连贯。
我们不能这样做吗?
【问题讨论】:
-
确保您的表单将正确的数据发送回控制器。我使用 API-Platform,遇到过几次类似的问题,例如,当我发现操作应该有一个像
someField这样的属性时,我正在发送一个像some_field这样的属性。在这种情况下,我虽然发送了值,但由于拼写错误,Symfony 无法进行正确的验证。
标签: php symfony symfony-forms symfony-validator