#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