我有一个动态的选择列表显示在窗体中,我只想将它们保存在一个地方,因为这些不是我必须关心的唯一数据集。Symfony2&Annotations&Choices验证:如何存储和检索选项选项?
要验证实体中的选择 - 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();
怎么/你解决这个问题?
参考文献:
- 见: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
谢谢。这真的有帮助。为1.我避免按照你的建议传递service_container。问题的关键在于,如果我不必每次都为每次测试设置整个容器,那么测试更容易。到2.DataManager现在只注入来自parameters.yml的数据列表。到3.完全按照你的说法,现在看起来很干净。我记住,当我发送这个信息时,我可以编写自己的验证和约束,并确认了我的想法。谢谢! – dazz 2012-02-09 16:35:23