我使用entity
表單類型來提供表單中的Position
實體列表。我經常使用它(每個都有相同的「設置」代碼來定製它),我決定從中爲它創建一個自定義表單類型,以便更好地重用。Symfony2:自定義表單類型的動態默認值?
下面是當前表單類型:
class PositionType extends AbstractType
{
private $om;
public function __construct(ObjectManager $om, $mode)
{
$this->om = $om;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
// I need to pass "mode" as an option when building the form.
$mode = ???
$query_builder = function (EntityRepository $em) use ($mode) {
// Limit the positions returned based on the editing mode
return $em
->createQueryBuilder('Position')
->orderBy('Position.name')
->leftJoin('Position.type', 'Type')
->andWhere('Type.id IN (:ids)')
->setParameter('ids', Type::typesForMode($mode))
;
};
$resolver
->setRequired(array('mode'))
->setDefaults(array(
'label' => 'Position',
'class' => 'AcmeBundle:Position',
'property' => 'name',
'query_builder' => $query_builder,
'empty_value' => '',
'empty_data' => null,
'constraints' => array(
new NotBlank(),
),
))
;
}
public function getParent()
{
return 'entity';
}
public function getName()
{
return 'position';
}
}
不要擔心在查詢生成器的細節,這並不重要。重要的部分是我試圖在查詢生成器中使用表單類型選項。
我該怎麼做?問題是我不能在setDefaultOptions
中使用$mode
(我想通過的選項來更改查詢生成器)。
我開始尋找一種方法從buildForm
中設置查詢生成器,但我不確定我能做到這一點。
完美,正是我所需要的。謝謝。 – Brian 2014-09-19 17:20:18
雖然我不是通過實體管理器,而是像最初一樣返回可調用的函數,它通過Symfony – Brian 2014-09-19 17:21:49
的管理器正確地:)並歡迎您;) – 2014-09-19 18:57:58