Я использую symfony4.1 и я создал форму с помощью компоновщика, например:
->add('products', CollectionType::class, array(
'entry_type' => FrontProductsType::class,
'entry_options' => [
'label' => 'Produkt',
],
'label' => 'Dodaj produkty',
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'required' => false,
'attr' => [
'class' => 'products-select',
],
))
, и мой вопрос заключается в том, как передать данные в этот класс сущностей внутри типа коллекции?
Вот эта встроенная форма:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('product', EntityType::class, array(
'placeholder' => 'Wyszukiwarka',
'mapped' => false,
'multiple' => false,
'class' => Products::class,
'data' => $options['product'],
'attr' => [
'class' => 'chosen-select order_product',
'data-placeholder' => 'Wybierz produkt',
],
'choice_attr' => function($product) {
$cena = $product->getJson()["products"]["cena"];
$stock = $product->getJson()["products"]["stock"];
$vat = $product->getJson()["products"]["vat"];
return array(
'class' => 'single_option',
'single_price' => $cena,
'stock_available' => $stock,
'single_vat' => $vat,
);
},
'choice_label' => function ($product) {
return '' . $product->getJson()["products"]["name"] . ' | Stan Magazynowy: ' . $product->getJson()["products"]["stock"] . ' | Cena netto: ' . $product->getJson()["products"]["cena"] .'';
},
'label' => 'Wybierz produkty'
))
->add('quantity', IntegerType::class, [
'label_attr' => array('class' => 'bmd-label-floating'),
'label' => 'Ilość',
'mapped' => false,
'required' => true,
'data' => $options['quantity'],
'attr' => [
'class' => 'form-control single-quantity-field',
]])
->add('cena', TextType::class, [
'label_attr' => array('class' => 'bmd-label-floating'),
'label' => 'Koszt brutto',
'mapped' => false,
'required' => true,
'data' => $options['cena'],
'attr' => [
'read_only' => true,
'class' => 'form-control single-price-field'],
]);
$builder->get('product')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$json = $form->getData()->getJson();
$data = $form->getData();
foreach ($json as $prop) {
foreach ($prop as $key => $value) {
$$key = $value;
}
}
$cena = number_format($cena, 2);
$form->getParent()->add('cena',TextType::class, [
'label_attr' => array('class' => 'bmd-label-floating'),
'label' => 'Koszt brutto',
'mapped' => false,
'required' => true,
'data' => $cena,
'attr' => [
'read_only' => true,
'class' => 'form-control single-price-field', 'value' => $cena],
])
->add('quantity', IntegerType::class, [
'label_attr' => array('class' => 'bmd-label-floating'),
'label' => 'Ilość',
'mapped' => false,
'required' => true,
'attr' => [
'class' => 'form-control single-quantity-field',
'min' => 1,
'max' => $stock,
]]);
}
);
}
public function getBlockPrefix()
{
return 'product';
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Products::class,
'product' => null,
'quantity' => null,
'cena' => null
]);
}
}
Все выглядит хорошо, когда я сохраняю.Когда я пропускаю некоторые продукты, в массиве появляется ряд продуктов, но не передаются значения, которые нужно установить в расширенной форме.Любая идея, как передать данные, чтобы заполнить под форму из collectiontype?