Код: Выделить всё
abstract class AbstractSimpleCollectionType extends AbstractType
{
abstract protected function getEntryTypeClassname(): string;
protected function getDataClassName(): string
{
return "";
}
public function getParent(): string
{
return CollectionType::class;
}
protected function getEntryOptions($options): array
{
return [];
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
//???
}
public function buildView(FormView $view, FormInterface $form, array $options): void
{
parent::buildView($view, $form, $options);
$view->vars['prioritizable'] = $options['prioritizable'];
// + more configurable settings
}
public function configureOptions(OptionsResolver $resolver): void
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'prioritizable' => false,
'entry_type' => $this->getEntryTypeClassname(),
'entry_options' => [],
'error_bubbling' => false,
'allow_add' => true,
'allow_delete' => true,
'keep_as_list' => true,
'prototype' => true,
'constraints' => [
new Valid(),
],
]);
}
public function getBlockPrefix(): string
{
return "simple_collection";
}
}
Код: Выделить всё
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$entryOptions = array_merge(
$this->getEntryOptions($options),
[
'attr' => ['class' => 'f-listItemBox'],
],
$options['entry_options']
);
if (!empty($this->getDataClassName())) {
$entryOptions = array_merge($entryOptions, ['data_class' => $this->getDataClassName(),]);
}
$options['entry_options'] = $entryOptions;
parent::buildForm($builder, $options);
}
Пример:
Код: Выделить всё
class WeightedControlledTermDropDownArrayType extends AbstractSimpleCollectionType
{
public function buildView(FormView $view, FormInterface $form, array $options): void
{
parent::buildView($view, $form, $options);
$view->vars['skosmosGroup'] = $options['skosmos_group'];
$view->vars['skosmosCollection'] = $options['skosmos_collection'];
}
public function configureOptions(OptionsResolver $resolver): void
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'placeholder' => "",
'skosmos_group' => "",
'skosmos_collection' => "",
]);
}
protected function getEntryOptions($options): array
{
return [
'label' => false,
'placeholder' => $options['placeholder'],
'skosmos_group' => $options['skosmos_group'],
'skosmos_collection' => $options['skosmos_collection'],
];
}
protected function getEntryTypeClassname(): string
{
return WeightedControlledTermDropDownType::class;
}
protected function getDataClassName(): string
{
return WeightedControlledTerm::class;
}
}
Код: Выделить всё
public function buildForm(FormBuilderInterface $builder, array $options): void
{
dd($options);
}
Так что же я делаю не так?
Подробнее здесь: https://stackoverflow.com/questions/787 ... ntype-with
Мобильная версия