Один-к-одному по форме? - PullRequest
6 голосов
/ 11 мая 2011

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

Ответы [ 2 ]

11 голосов
/ 12 мая 2011

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

// Application\AcmeBundle\Form\Type\FacultyType
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. Отношение «один к одному» будет чем-то более похожим на отношение, в котором University имеет уникальный Address. В этом случае поле со списком было бы бесполезным, так как в университете может быть только один адрес, поэтому форма была бы более подходящей. Если у него много адресов, то он становится отношением «один ко многим», как отношения между университетом и его факультетами.

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

С уважением, Matt

1 голос
/ 10 октября 2013

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

...