Я пытался отобразить форму с данными JSON.Я не могу понять, что мне нужно сделать, чтобы эта форма имела несколько полей ввода с TextType?Одно значение json в одном поле ввода.
Я знаю, как просмотреть массив json в ветке без формы компонента, но я хочу просмотреть json с формой компонента Symfony 4
.
Это массив json
[{"name":"PHP","image":"php.png"},{"name":"java","image":"java.png"},{"name":"postgresql","image":"postgresql.png"},{"name":"JS","image":"js.png"}]
Это мой код:
Класс ProjectsController
class ProjectsController extends BaseAdminController {
public function createEntityFormBuilder($entity, $view)
{
$formBuilder = parent::createEntityFormBuilder($entity, $view);
$formBuilder
->add('title')
->add('description', TextareaType::class)
->add('technology', ProjectTechnologyType::class)
->add('type', ProjectType::class)
->add('url');
return $formBuilder;
}
}
Класс ProjectTechnologyType
class ProjectTechnologyType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('image', ProjectJsonType::class);
$builder->get('image')
->addModelTransformer(new CallbackTransformer(
function ($technologyAsArray) {
return json_encode($technologyAsArray);
},
function ($technologyAsJson) {
return json_decode($technologyAsJson);
}
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => ProjectTechnology::class
));
}
}
Класс ProjectJsonType
class ProjectJsonType extends AbstractType{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([]);
}
public function getParent()
{
return CollectionType::class;
}
}
Веточка
{% block main %}
{% block entity_form %}
{{ form_row(form.title) }}
{{ form_row(form.description) }}
{{ form_row(form.type) }}
{{ form_row(form.technology) }}
{{ form_row(form.url) }}
{% endblock entity_form %}
{% endblock %}