Symfony 4 - Как получить доступ к переменной из контроллера в FormType

У меня есть переменная $ 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')

Как это сделать?

Пожалуйста, удалите «[РЕШЕНО]» из заголовка: принятие ответа - это способ пометить его как решенный.

DonCallisto 18.05.2018 20:05

Готово, спасибо за помощь !!!

Борислав Якимов 18.05.2018 20:51
JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
2
949
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Привет, ты можешь попробовать вот так

контролер

$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 лет или около того.

Cerad 18.05.2018 14:40
Ответ принят как подходящий

Передайте его как обязательную (обязательную) опцию в вашу форму 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)

        },
    ]);
}

Другие вопросы по теме