Однозначная ассоциация в форме?

#php #symfony #symfony-forms #one-to-one

#php #symfony #symfony-forms #взаимно однозначный

Вопрос:

В symfony 2.0, как создать выпадающий список, используя взаимно однозначную ассоциацию в форме? Не могли бы вы, ребята, привести хороший пример, пожалуйста?

Комментарии:

1. Можете ли вы предоставить более подробную информацию о том, чего вы хотите?

2. Я хочу создать поле со списком из взаимно однозначной связанной таблицы.

Ответ №1:

Я постараюсь ответить на ваш вопрос так, как я его понимаю. Допустим, у меня есть Faculty объект, привязанный к одному University объекту. Итак, в форме, используемой для создания или редактирования факультета, я показываю поле со списком всех университетов в базе данных, и пользователь выбирает один из них. Существует один специальный тип поля Symfony, который делает именно это: тип сущности. Ниже приведен код buildForm метода, который я использую в своем FacultyType объекте, используемом для создания формы факультета:

 // ApplicationAcmeBundleFormTypeFacultyType
public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('name');
    $builder->add('university', 'entity', array(
        // The class of the entity used as a combo box item
        'class' => 'AcmeBundle:University',

        // The property of the entity displaying the entity as text
        'property' => 'name',

        // The query builder used to populate the combo box, accepts
        // a QueryBuilder object or a Closure like below 
        'query_builder' => function(EntityRepository $repository) {
            // This will return a query builder selecting all universities
            return $repository->createQueryBuilder('u');
        }
    ));
}
  

Примечание: Существуют другие свойства, которые можно задать для типа поля сущности, я приглашаю вас взглянуть на эту страницу для получения дополнительной информации о ней.

При визуализации отобразится поле со списком всех университетов, которые я установил в базе данных. Когда пользователь сохраняет форму, выбранный университет присваивается объекту факультета, привязанному к форме с помощью установщика. Вероятно, вы могли бы отобразить выпадающий список вместо поля со списком. Если вам нужно выбрать несколько объектов, 'multiple' опция объекта типа поля может быть полезной.

При этом приведенный мной пример — это не отношение «один к одному», а скорее отношение «Многие к одному» для Faculty объекта и «Один ко многим» для University объекта. Взаимно однозначное отношение было бы чем-то больше похожим на отношение, в котором a University имеет уникальный Address . В этом случае поле со списком было бы бесполезно, поскольку у университета может быть только один адрес, поэтому подформа была бы более подходящей. Если у него много адресов, то оно становится отношением «Один ко многим», подобным отношению между университетом и его факультетами.

Не уверен, что это правильно ответит на ваш вопрос, но я надеюсь, что это приведет вас к окончательному решению.

С уважением, Мэтт

Ответ №2:

Вам нужно использовать тип поля сущности в Symfony2. Хороший пример можно найти на http://symfony.com/doc/current/reference/forms/types/entity.html