所以我有一个 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,
]);
}
}
And a 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
你能检查一下吗?希望这是问题所在,否则您将不得不向我们提供某种堆栈跟踪,而不是说“表单有效”。对配置进行任何更改后,也不要忘记清除缓存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)