У меня есть переменная $ parentId в ListProductsController. Я хочу получить значение $ parentId и использовать его в моем SearchProductType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('price',EntityType::class,[
'class'=>Product::class,
'choice_label'=>'price',
'choice_value'=>'price',
'placeholder'=>'Default',
'query_builder' => function (EntityRepository $er){
return $er->createQueryBuilder('product')
->innerJoin('product.category','c')
->addSelect('c')
->innerJoin('product.manorwomen','m')
->addSelect('m')
->where('c.parent_id=1')
},
'expanded'=>false,
'multiple'=>false
])
->add('submit',SubmitType::class)
;
}
c.parent_id должен быть равен $ parentId от контроллера
->where('c.parent_id=$parentId')
Как это сделать?
Готово, спасибо за помощь !!!




Привет, ты можешь попробовать вот так
контролер
$data = array("parentId" => $parentId));
$form = $this->createForm(new ExampleFormType($data), $objName);
форма
class ExampleFormType extends AbstractType {
public $data = array();
public function __construct($data) {
$this->data = $data; // Now you can use this value while creating a form field for giving any validation.
}
}
вы можете получить доступ к parentId из массива $ данные
Я полагаю, они могли бы попробовать, но это не сработает. По крайней мере, начиная с Symfony 2.7. Все изменилось за последние 5 лет или около того.
Передайте его как обязательную (обязательную) опцию в вашу форму SearchProductType.
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired([
'parentId',
]);
}
Затем передайте его при создании формы в ListProductsController
$form = $this->createForm(SearchProductType::class, $objName,
['parentId' => $parentId], //or whatever the variable is called
);
Наконец используйте это
public function buildForm(FormBuilderInterface $builder, array $options)
{
$parentId = $options['parentId'];
$builder->add('price',EntityType::class,[
[...]
'query_builder' => function (EntityRepository $er) use ($parentId) {
[...]
->where('c.parent_id=' . $parentId)
},
]);
}
Пожалуйста, удалите «[РЕШЕНО]» из заголовка: принятие ответа - это способ пометить его как решенный.