Symfony 2.7选择回调不在表单中

时间:2016-04-05 08:49:47

标签: php symfony doctrine

我有一个具有多项选择属性的类:

http://fourkitchens.com/blog/article/trigger-jenkins-builds-pushing-github

我也有这个类的表单类:

...

/**
 * @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', )); } 的选择未呈现。

我只是按照以下步骤操作:http://symfony.com/doc/master/reference/constraints/Choice.html#supplying-the-choices-with-a-callback-function,但由于某些原因它无效。

修改

我看到使用静态选择作为注释既不起作用(getAvailableMajorityTypes)。它的唯一工作方式是在创建表单时直接在choices={"foo1", "foo2"}方法中传递选项。我还没有发现问题。

2 个答案:

答案 0 :(得分: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()
        ))

答案 1 :(得分:0)

我从未使用过这个注释,但是在文档中回调是public static:

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

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

如果您按照文档操作并使方法保持静态,则注释应该有效。