Symfony 自定义表单类型,使用 Options Resolver
Symfony custom form type, use Options Resolver
我正在使用 symfony 为我的项目创建一个表单。
根据事件,我检查是否有额外的颜色数据将此数据添加到当前列表。
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$data = $event->getData();
$new_color_value = $data->getColor();
$form = $event->getForm();
$form->add('color', ColorType::class, [
'required' => false,
'invalid_message' => 'La couleur est incorrecte.',
'other_color_if_exists' => $new_color_value,
'choice_label' => function ($choice, $key, $value) {
return $value;
},
]);
})
我的自定义颜色类型:
public function configureOptions(OptionsResolver $resolver)
{
$parameters = $this->session->get('parameters');
$resolver->setDefault('color_from_api', false);
$resolver->setAllowedTypes('other_color_if_exists', ['null', 'string']);
$resolver->setDefault('choices', function (Options $options) use ($parameters) {
if ($options['color_from_api']){
array_push($parameters['color'], $options['color_from_api']);
}
return array_unique($parameters['color']);
});
}
public function getParent()
{
return ChoiceType::class;
}
现在我不使用会话,但是出现错误:
您应该能够 create/pass 'color_from_api'
的选项。使用 OptionsResolver
设置默认值 'choices'
和闭包。
在自定义颜色类型中:
public function configureOptions(OptionsResolver $resolver)
{
$parameters = $this->session->get('parameters');
$resolver->setDefault('color_from_api', false);
$resolver->setDefault('choices', function (Options $options) use ($parameters) {
if ($options['color_from_api']){
array_push($parameters['color'], $options['color_from_api']);
}
return array_unique($parameters['color']);
});
}
在控制器中:
$form = $this->createForm(MyEntityType::class, $entity, [
'color_from_api' => $entity->getColor(),
]);
我正在使用 symfony 为我的项目创建一个表单。
根据事件,我检查是否有额外的颜色数据将此数据添加到当前列表。
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$data = $event->getData();
$new_color_value = $data->getColor();
$form = $event->getForm();
$form->add('color', ColorType::class, [
'required' => false,
'invalid_message' => 'La couleur est incorrecte.',
'other_color_if_exists' => $new_color_value,
'choice_label' => function ($choice, $key, $value) {
return $value;
},
]);
})
我的自定义颜色类型:
public function configureOptions(OptionsResolver $resolver)
{
$parameters = $this->session->get('parameters');
$resolver->setDefault('color_from_api', false);
$resolver->setAllowedTypes('other_color_if_exists', ['null', 'string']);
$resolver->setDefault('choices', function (Options $options) use ($parameters) {
if ($options['color_from_api']){
array_push($parameters['color'], $options['color_from_api']);
}
return array_unique($parameters['color']);
});
}
public function getParent()
{
return ChoiceType::class;
}
现在我不使用会话,但是出现错误:
您应该能够 create/pass 'color_from_api'
的选项。使用 OptionsResolver
设置默认值 'choices'
和闭包。
在自定义颜色类型中:
public function configureOptions(OptionsResolver $resolver)
{
$parameters = $this->session->get('parameters');
$resolver->setDefault('color_from_api', false);
$resolver->setDefault('choices', function (Options $options) use ($parameters) {
if ($options['color_from_api']){
array_push($parameters['color'], $options['color_from_api']);
}
return array_unique($parameters['color']);
});
}
在控制器中:
$form = $this->createForm(MyEntityType::class, $entity, [
'color_from_api' => $entity->getColor(),
]);