私はフォームに表示する選択肢の動的リストを持っています。私は気にしなければならない唯一のデータセットではないので、それらを1か所に保持したいだけです。Symfony2&Annotations&Choices検証:選択肢の保存と検索の方法は?
Entity over-CallbackValidatorでこれらの選択肢を検証するには、選択肢が返されるフィックスクラスと関数を指定する必要があります。
これは私がまだSymfony2とDICの概念を学んでいて、具体的なコールバック関数/クラスを指定するのではなく、サービスを解決したり、これを解決する別の方法を考えているので正しくありません。
私はクラス名ではなく、コールバックとしてサービス名を与えたいと思います。私はここで間違っていますか?
私は今ここで、(それ以降)電子メールを送信するために知って注釈
セットアップをエンティティを検証するために、フォーム
- にオプションのリストが必要になります。
services.yml - service_containerで定義され、Formがサービスとして定義されたDataManager(I don 'これが正しければt)を知っている:
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; }
だから私は、サービス内のデータのリストを持っていますが、どのようにだろうエンティティを検証するための選択肢を取得することを提案しますか?
// somehow you have an array of "fake names" $fakeNames = array();
/あなたがこれを解決するだろうましたか:私はコールバックの検証(リンク2)を使用して、それでもそこにはサイスドキュメントにあったと考え
別の解決策は?
参考文献:
- 参照:http://symfony.com/doc/current/reference/constraints/Choice.html#supplying-the-choices-with-a-callback-function(クリック注釈)
- を参照してください:あなたのサービスにservice_containerを渡すhttp://symfony.com/doc/current/reference/constraints/Callback.html#the-callback-method
ありがとうございます。これは本当に助けになりました。あなたが提案したようにservice_containerを渡すのを避けました。各テストのたびにコンテナ全体を設定する必要がなければ、テストが簡単になることがポイントです。 DataManagerは、parameters.ymlからのデータのリストだけを注入します。あなたが言ったとおりにそれをしました、今清潔に見えます。私はこれを送って自分の考えを確認したときに私自身の検証と拘束を書くことができることを念頭に置いていました。ありがとう! – dazz