Класс не реализует «Symfony \ Component \ Form \ FormTypeInterface» в Sylius - PullRequest
0 голосов
/ 26 июня 2018

Мы пытаемся перейти от CustomerProfileType, и мы получаем ошибку вроде:

 {
"code": 500,
"message": "Could not load type "abc\Form\Extension\AdminApi\CustomerProfileTypeExtension": class does not implement "Symfony\Component\Form\FormTypeInterface"."
}

Customer.yml:

sylius_admin_api_customer_create:
    path: /
    methods: [POST]
    defaults:
        _controller: sylius.controller.customer:createAction
        _sylius:
            serialization_version: $version
            serialization_groups: [Detailed]
            form:
                type: abc\Form\Extension\AdminApi\CustomerProfileTypeExtension

CustomerProfileTypeExtension.php

final class CustomerProfileTypeExtension extends AbstractTypeExtension
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        // Adding new fields works just like in the parent form type.
        $builder->add('contactHours', TextType::class, [
            'required' => false,
            'label' => 'app.form.customer.contact_hours',
        ]);

        // To remove a field from a form simply call ->remove(`fieldName`).
        $builder->remove('gender');

        // You can change the label by adding again the same field with a changed `label` parameter.
        $builder->add('lastName', TextType::class, [
            'label' => 'app.form.customer.surname',
        ]);
    }


    /**
     * {@inheritdoc}
     */
    public function getExtendedType(): string
    {
        return CustomerProfileType::class;
    }


}

1 Ответ

0 голосов
/ 26 июня 2018

Как следует из сообщения об исключении, вы реализуете расширение типа формы вместо типа формы.

Расширения типа формы предназначены для изменения способа работы формы :

У них есть 2 основных варианта использования:

Вы хотите добавить определенную функцию к одному типу формы (например, добавить функцию «загрузки» к типу поля FileType);

Вы хотите добавить универсальную функцию к нескольким типам (например, добавить текст «справки» к каждому типу, похожему на «входной текст»).

Чтобы реализовать конкретные формы, вы должны либореализовать Symfony\Component\Form\FormTypeInterface или расширить класс, который его реализует (обычно в Symfony это будет Symfony\Component\Form\AbstractType).

Чтобы использовать наследование в типах форм, используйте FormInterface#getParent. Этот ТАК вопрос может помочь вам в этом.

...