我有一個動態的選擇列表顯示在窗體中,我只想將它們保存在一個地方,因爲這些不是我必須關心的唯一數據集。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