В настоящее время я работаю над проектом Symfony2, и я застрял в создании формы. У меня есть следующие настройки:Заполните форму доктрины с элементами динамической формы
<?php
class Field {
private $name;
private $label;
private $type;
/**
* @ORM\OneToMany(targetEntity="Option", mappedBy="field")
*/
private $options;
....
?>
и
<?php
class Option {
private $value;
private $type;
/**
* @var string
*
* @ORM\ManyToOne(targetEntity="Field", inversedBy="options")
* @ORM\JoinColumn(name="field", referencedColumnName="name")
*/
private $field;
....
?>
Теперь, что я хотел бы сделать, я создаю форму, с «поле» как выпадающий список/опция/radioobutton/checkbox (которая задается полем :: Тип $) и заполните поле его параметрами. Есть идеи?
Редактировать: Что может быть важно: мне не нужна возможность добавлять, удалять или изменять параметры. Они исправляются в базе данных и просто нужно выбирать. Некоторые с mulitple, некоторые без.
Edit2: Просто для уточнения: Я строю свои формы с Symfony формы: У меня есть основной вид типа («Case»), который содержит поля, которые содержат его Опции:
class CaseType extends AbstractType
{
private $case;
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->case = $options['data'];
$builder
->add('user')
->add('fields', 'collection', array('type' => new FieldType()))
;
и:
class FieldType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('options', 'entity', array(
"class" => "MyBundle:Option",
"property" => "value",
"query_builder" => function (EntityRepository $er) {
return $er->createQueryBuilder('o', 'Option')
->where('o.field = :f')
->setParameter('f', **type_of_current_field**)
->orderBy('o.value', "ASC");
}
));
Просто это не работает, как ожидалось ... Во-первых, потому что я не могу получить доступ к> тип и второй-полевого это довольно беспорядок
Edit3: Хорошо, я совершенно не понимаю, почему это делает не работает:
class FieldType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$formFactory = $builder->getFormFactory();
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formFactory) {
$form = $event->getForm();
$data = $event->getData();
$form->add('options', 'entity', array(
"class" => "MyBundle:Option",
"property" => "value",
"multiple" => "true",
));
});
... >
Это просто дает мое следующее сообщение об ошибке: Предупреждение: недопустимый аргумент, поставляемый для Еогеасп()
Если я не смогу просто проанализировать все варианты для одного поля? Или мой подход совершенно неправильный, и я должен делать это по-другому? Когда я вывожу свои поля, это выглядит так:
Field {#427 ▼
-id: 26
-name: "MyField"
-label: "field to fill out"
-type: "D"
-public: 1
-options: PersistentCollection {#440 ▼
-snapshot: array:2 [ …2]
-owner: Field {#427}
-association: array:15 [ …15]
-em: EntityManager {#289 …10}
-backRefFieldName: "field"
-typeClass: ClassMetadata {#401 …}
-isDirty: false
-initialized: true
-coll: ArrayCollection {#397 ▼
-_elements: array:2 [▼
0 => Option {#435 ▼
-id: 91
-value: 1
-field: Field {#427}
-type: "D"
}
1 => Option {#432 ▼
-id: 92
-value: 2
-field: Field {#427}
-type: "D"
}
]
}
}
}
Вы используете двигатель для завивки волос? –
Я использую доктрину и ветку. – strix
Вы подумали об использовании форм [Symfony forms] (http://symfony.com/doc/current/book/forms.html)? – schemar