Что касается того, что вы уже попробовали, я думаю, вам следует повторить ваши первые / вторые идеи:
Моей первой идеей было использовать тип сущности формы, думая, что компонент
может быть привязан как-то на другом поле. то есть. обновить список сотрудников
на основе стоимости выбранной компании.
Вы можете заполнить поле выбора сотрудников, используя тип entity
.
Все, что вам нужно сделать, это определить хорошие варианты:
class FooType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('employee', 'entity', array(
'class' => 'Entity\Employee',
'query_builder' => function ($repository) use($options) {
return $repository
->createQueryBuilder('e')
->where('e.company = :company')
->setParameter('company', $options['companyId'])
;
},
))
;
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Entity\Foo', 'companyId' => null);
}
}
Тогда я подумал о том, чтобы вручную передать выбранную компанию как
Параметр для построителя запросов из второго выпадающего списка.
В приведенном здесь примере фильтруется список сотрудников на основе параметра формы companyId.
Вы можете изменить это поведение, отфильтровав данные о компании, представленной в данных формы.
public function buildForm(FormBuilder $builder, array $options)
{
$companyId = $builder->getData()->getCompanyId();
$builder
->add('employee', 'entity', array(
'class' => 'Entity\Employee',
'query_builder' => function ($repository) use ($companyId) {
return $repository
->createQueryBuilder('e')
->where('e.company = :company')
->setParameter('company', $companyId)
;
},
))
;
}
Вы все еще должны реализовать методы getEmployee()
и setEmployee()
в своем классе Entity\Foo
.
Но когда форма создана, значения пусты. Значения установлены только на
bindRequest.
Нет. Значения устанавливаются при создании формы с использованием фабрики форм (третий аргумент),
ИЛИ когда вы звоните $form->setData($foo);
. Данные изменяются, когда вы bind
вводите новые данные в форму.
При таком подходе может возникнуть проблема: возможно, идентификатор сотрудника, связанный с формой, недоступен в списке выбора формы, поскольку вы изменили компанию (и, следовательно, сотрудников).