Как правильно использовать FormBuilderInterface в Symfony с пользовательскими типами - PullRequest
0 голосов
/ 16 мая 2019

У меня есть 3 связанные таблицы базы данных ( инвентарь, продажа, продажа_детали ), я хотел бы иметь возможность создать форму, которая может обрабатывать создание продажи.

Проблема связана с моим настраиваемым полем " InventoryType ", которое должно правильно отображаться на объект в базе данных.

ПРИМЕЧАНИЕ : Запасы хранятся однозначно по их серийному номеру.

Я создал 3 пользовательских типа полей: " InventoryType, SaleDetailsType, SaleType ",

The InventoryType содержит данные, равные таблице инвентаризации и (Inventory.php Entity)

. SaleDetailsType содержит один InventoryType ,

И SaleType содержит коллекцию SaleDetailsTypes , информацию об учетной записи и т. Д.

Я пытался с файлом InventoryToSerialNumberTransformer преобразовать серийный номер винвентарь, чтобы поле InventoryType содержало только серийный номер.

// src/Form/Type/InventoryType.php
$builder->add('serialNumber', TextType::class, ['label' => 'Serialnumber'])
// src/Form/Type/SaleDetailsType.php
$builder->add('Inventory', InventoryType::class, ['label' => 'Inventory item']);
// src/Form/Type/SaleType.php
$builder->add('account', EntityType::class, [ 'class' => Account::class ])
    ->add('shop', EntityType::class, [ 'shop' => Shop::class ])
    ->add('saledetails', CollectionType::class, [ 'entry_type' => SaleDetailsType::class, 
                                                  'entry_options' => ['label' => false],
                                                  'allow_add' => true ])
    ->add('save', SubmitType::class, ['label' => 'Create Sale!']);
{{ form_start(form) }}

{{ form_row(form.account) }}
{{ form_row(form.shop) }}

<h3>Saledetails</h3>
<ul class="saledetails">
    {% for detail in form.saledetails %}
        {% for inventory in detail %}
            <li> {{ form_row(inventory.serialNumber) }}</li>
        {% endfor %}
    {% endfor %}
</ul>

{{ form_row(form.save) }}

{{ form_row(form._token) }}

Ожидаемое поведение:

При добавлении элементов спискачерез клиентский JavaScript, который идентиченВажно, что Symfony использует (это уже сделано и работает отлично), «инвентарь» должен быть правильно вставлен только из серийного номера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...