Используйте тип entity
вместо choice
$builder
->add('entity_property', 'entity', array(
'class' => 'Namespace\\To\\Entity',
'query_builder' => function(EntityRepository $repository) {
return $repository->createQueryBuilder('q')
->where('q.a_field = yourvalue');
}
));
Редактировать:
Два способа использования пользовательских параметров в вашем запросе.В обеих ситуациях параметры вводятся извне, поэтому вашему FormType не нужны никакие ссылки на объекты сеанса или запроса или что-то в этом роде.
1 - Передайте необходимые параметры в ваш конструктор
class TaskType extends AbstractType
{
private $custom_value;
public function __construct($custom_value) {
$this->custom_value = $custom_value;
}
// ...
}
в вашем buildForm()
вы должны скопировать значение в локальную переменную и сделать его доступным для обратного вызова query_builder:
public function buildForm(/*...*/) {
$my_custom_value = $this->custom_value;
// ...
'query_builder' => function(EntityRepository $repository) use ($my_custom_value) {
return $repository->createQueryBuilder('q')
->where('q.a_field = :my_custom_value')
->setParameter('my_custom_value', $my_custom_value);
}
// ...
}
2 - используйте параметр $options
метода buildForm
.
Сначала вы должны определить значение по умолчанию, переопределив getDefaultOptions
:
public function getDefaultOptions(array $options)
{
return array(
'my_custom_value' => 'defaultvalue'
);
}
Затем вы можете передать его из вашего контроллера в третьем аргументе метода createForm
.
$this->createForm(new YourFormType(), $entity, array('my_custom_value' => 'custom_value'));
Теперь значение должно быть доступно через параметр $options
метода youru buildForm.Передайте его обратному вызову, как описано выше.