2016-04-05 10 views
2

で動作していない:symfonyの2.7選択肢のコールバックは、私は複数の選択肢のプロパティを持つクラスを持っている形

... 

/** 
* @ORM\Column(type="array", name="majority_types") 
* @Constraints\Choice(callback="getAvailableMajorityTypes", multiple="true") 
*/ 
private $majorityTypes; 

... 

public static function getAvailableMajorityTypes() 
{ 
    return array(
     self::SIMPLE_MAJORITY, 
     self::UNANIMITY_MAJORITY, 
     self::THREE_FIFTHS_MAJORITY, 
     self::ONE_THIRD_MAJORITY, 
     self::FOUR_FIFTHS_MAJORITY 
    ); 
} 

... 

また、私はこのクラスのフォームクラスを持っている:

... 

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ... 
     ->add('majorityTypes', ChoiceType::class, array(
      'multiple' => true, 
     )) 
     ... 
     ->getForm(); 
} 

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'MyClass', 
    )); 
} 

しかしgetAvailableMajorityTypesから選択レンダリングされません。

私は単に次の手順を実行しました:http://symfony.com/doc/master/reference/constraints/Choice.html#supplying-the-choices-with-a-callback-functionしかし、何らかの理由で動作しません。

編集:

は私が注釈として、静的な選択を使用してどちらの作品(choices={"foo1", "foo2"})ことを参照してください。唯一の方法は、フォームを作成するときにaddメソッドで直接選択肢を渡すことです。私はまだ問題を発見していない。私はこの注釈を使用したことがありません

答えて

2

私はあなたの言葉を参照している場合:

しかしgetAvailableMajorityTypesからの選択肢が表示されません。

フォームの選択フィールドでのオプションのレンダリングとChoiceという制約が混乱しているようです。

コード内に制約を実装しただけですが、選択肢にオプションを追加する必要もあります。このように:

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ... 
     ->add('majorityTypes', ChoiceType::class, array(
      'multiple' => true, 
      'choices' => YourEntity::getAvailableMajorityTypes() 
     )) 
+0

質問の最後の部分から:*フォームを作成するときに、addメソッドで直接選択肢を渡す方法があります。これがあなたが提案しているものです。ではない? – Manolo

+0

はい、本当にありがとうございます。試した他のものは、HTMLフォームのレンダリングではなく、送信されたフォームの検証に関連しています。 – Guillaume

+0

意味があります。 – Manolo

0

、しかしドキュメントにコールバックは、パブリック静的です:

// src/AppBundle/Entity/Author.php 
namespace AppBundle\Entity; 

class Author 
{ 
    public static function getGenders() 
    { 
     return array('male', 'female'); 
    } 
} 

あなたがドキュメントに従うと、同様の注釈が動作するはずです、あなたの方法の静的を作る場合。

+0

はい、それは不可解でした。とにかく、それはまだ動作しません。コールバックが存在しないメソッドに名前を変更した場合と同様に、コールバックが呼び出されないようです。エラーはスローされません。 – Manolo

関連する問題