add('entities', HiddenType::class, [ 'required' => false, ]); $builder->get('entities')->addModelTransformer( new CallbackTransformer( function ($ids): string { return implode(',', $ids); }, function ($ids) use ($repository) { if (empty($ids)) { return []; } return $repository->matching((new Criteria())->where(Criteria::expr()->in('id', explode(',', $ids)))); } ) ); $i = 0; foreach ($dto->getActions() as $key => $value) { if (empty($key) || empty($value)) { continue; } $builder->add('action_' . $i++, ButtonType::class, [ 'label' => $key, 'attr' => [ 'data-href' => $value, 'class' => 'multi_update_table_action' . (stripos($key, 'delete') !== false ? ' btn-danger' : ''), ], ]); } } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefined(['repository']); $resolver->setAllowedTypes('repository', EntityRepository::class); $resolver->setRequired('repository'); $resolver->setDefaults([ 'data_class' => MultiUpdateTableDTO::class, 'csrf_protection' => true, 'csrf_field_name' => '_token', 'csrf_token_id' => 'entities_multiupdate', ]); } }