Symfony 7: default-entry_options для наследника CollectionType сPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Symfony 7: default-entry_options для наследника CollectionType с

Сообщение Anonymous »

У меня немного сложная ситуация: я определил базового наследника CollectionType с целью упростить включение коллекций в мое приложение и упростить настройку некоторых стандартных поведений внешнего интерфейса. пример:

Код: Выделить всё

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";
}
}
Я думал, что реализация buildForm сделает что-то вроде этого:

Код: Выделить всё

    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);
}
перенес бы параметры записи на мой тип записи, но, похоже, это не так. Когда я сбрасываю параметры в методе buildForm моего класса типа для записей, параметры записи исчезают.
Пример:

Код: Выделить всё

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;
}
}
и в WeightedControlledTermDropDownType я делаю это:

Код: Выделить всё

    public function buildForm(FormBuilderInterface $builder, array $options): void
{
dd($options);
}
запишет только $options с базовыми значениями по умолчанию.
Так что же я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/787 ... ntype-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»