我有一个动态的选项列表要在表单中显示,我只想将它们保存在一个地方,因为这些不是我唯一需要关注的数据集。
要在实体中通过选择验证这些选择 - CallbackValidator,我需要指定一个修复类和函数,其中将返回选项。
这似乎不对,因为我还在学习Symfony2和DIC概念,然后我不希望指定一个具体的回调函数/类,而是一个服务或想到另一种方法来解决这个问题。
我想提供的不是类名,而是服务名称作为回调。我错了吗?
我需要
的选项列表立即设置:
services.yml - 使用service_container和Form作为服务定义的DataManager(我不知道这是否正确):
services:
data_manager:
class: TestBundle\Service\DataManager
arguments:
- "@service_container"
- %tc_data.list%
support_type_form:
class: TestBundle\Form\Type\TicketType
arguments: ["@service_container"]
tags:
- { name: form.type }
表格:
class TicketType extends FormType
{
public function buildForm(FormBuilder $builder, array $options)
{
$theChoices = $this->getContainer()->get('data_manager')->getTheChoices();
...
}
}
实体:
class Ticket
{
/**
* @Assert\NotBlank()
* @Assert\Choice(callback = {"NotAServiceReference", "getTheChoices"})
*/
private $the_list_field;
}
所以我有服务中的数据列表,但您如何建议我检索选择以验证实体?
我想到的另一个解决方案是使用回调验证(链接2),但即使在文档中也是如此:
// somehow you have an array of "fake names"
$fakeNames = array();
你是怎么解决这个问题的?
参考文献:
答案 0 :(得分:1)
至于在实体内部进行验证,并不确定是否需要。 form-> isValid()已经检查以确保您的选择有效。但我可以理解Assert \ Choices应该能够指定服务的期望。
从这里开始:http://symfony.com/doc/current/reference/constraints/Callback.html
但是,目前无法将服务指定为约束。要使用服务进行验证,您应该创建自定义验证约束并将新约束添加到您的类中。