我有一个动态的选项列表以显示在表单中,我只想将它们维护在一个地方,因为这些不是我必须关心的唯一数据集。
要通过选择 CallbackValidator 验证实体中的这些选择,我需要指定一个修复类和函数,这些选择将被返回。
这似乎不对,因为我仍在学习 Symfony2 和 DIC 概念,然后我不希望指定具体的回调函数/类,而是指定服务或考虑另一种解决此问题的方法。
我不想给一个类名,而是一个服务名作为回调。我在这里错了吗?
我需要选项列表
- 填表格
- 使用注释验证实体
- 知道在哪里发送电子邮件(稍后)
现在设置:
services.yml - 使用 service_container 定义的 DataManager 和 Form as a service(我不知道这是否正确):
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();
你如何/将如何解决这个问题?
参考:
- 请参阅:http ://symfony.com/doc/current/reference/constraints/Choice.html#supplying-the-choices-with-a-callback-function (单击注释)
- 请参阅:http ://symfony.com/doc/current/reference/constraints/Callback.html#the-callback-method