我已使用此代码设置实体
/**
* @Assert\Length(
* min = 20,
* max = 2000,
* minMessage = "message.min_length",
* maxMessage = "message.max_length"
* )
*/
protected $message;
当我使用桌面导航器时,当消息小于20时拒绝发送,但是当在iphone或平板电脑(android)上时,消息被发送,甚至是空的。该领域是textarea。 有什么想法吗?
答案 0 :(得分:1)
<强>更新强>
根据symfony文档,断言长度假定为NULL&amp;空字符串为有效,因此它传递的原因(http://symfony.com/doc/current/reference/constraints/Length.html#min)。
请添加Assert \ NotBlank(),这将验证空字符串
-
symfony表单构建器将执行的操作是将表单验证选项添加到表单元素,例如:
<input name="my_field" required>
桌面浏览器将验证是否需要此表单元素(客户端)&amp;如果为空,则阻止提交表单。在移动设备上,他们不会自动验证表单(我仍然要找到这个原因......?),因此您需要添加一些javascript表单验证,以防止表单在移动设备/平板电脑上无效时提交设备
请确保您的表单正确映射到实体类:
// AppBundle/Form/EntityForm.php
<?php
namespace AppBundle\Form;
class EntityForm extends AbstractType
{
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\MyEntity',
]);
}
}
要确保symfony验证注释,请将其添加到您的app / config / config.yml
# app/config/config.yml
framework:
validation: { enable_annotations: true }