php - 为什么 Symfony 表单不使用约束注释验证我的 DTO?
问题描述
所以我有一个 DTO,如下所示:
namespace App\DTO;
use Symfony\Component\Validator\Constraints as Assert;
class Task
{
/**
* @Assert\Type("string")
* @Assert\NotBlank
*/
public $title;
}
和一个表单类型:
namespace App\Form;
use App\DTO\Task;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TaskFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Task::class,
]);
}
}
就像这样TypeTestCase
:
namespace App\Tests\Entity;
use App\DTO\Task;
use App\Form\TaskFormType;
use Symfony\Component\Form\Test\TypeTestCase;
class TaskTest extends TypeTestCase
{
public function testValidation()
{
$task = new Task;
$form = $this->factory->create(TaskFormType::class, $task);
$form->submit([]); // empty data should trigger a validation error
dump(
$form->isValid(),
$form->getErrors(true)->getChildren(),
$task
);
}
}
转储显示表单被认为是有效的,没有错误,并且显示$task
其title
属性设置为null
。这不应该被认为是有效的,因为我说它不允许为空白。
当然,我在这里展示了一个简化的示例。在我的实际代码中,我正在验证更多属性,但所有这些都被忽略了。似乎Form
完全忽略了基于注释的验证。知道为什么吗?
解决方案
您没有向我们展示您的framework.yml
配置,所以我猜您可能缺少一些配置:
framework:
validation:
enabled: true
enable_annotations: true
你能检查一下吗?希望这是问题,否则您将不得不向我们提供某种堆栈跟踪,而不是说“表单有效”。对配置进行任何更改后,不要忘记清除缓存。
推荐阅读
- python - 如何在定时器结束并且用户没有输入后播放声音?
- javascript - 如何仅更改来自另一个组件的道具的颜色
- javascript - 在 Typescript 中测试 var 是否属于联合类型
- java - 二维对象数组不创建新对象,只是覆盖
- python - 测试多个标志python
- powershell - 你如何在powershell中解密securestring
- swift - 如何将 Firebase 时间戳占位符转换为 Swift 中的时间戳?
- php - php twilio SMS、CALLING 等中的语法错误意外“使用”(t_use)
- r - pdfpages Latex 包未找到
- java - 使用导航组件而不使用 ViewModel 时如何在后台堆栈中保留 Fragment 实例?