我有一个具有多项选择属性的类:
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"}
方法中传递选项。我还没有发现问题。
答案 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');
}
}
如果您按照文档操作并使方法保持静态,则注释应该有效。