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

В моей переменной ListProductsController есть переменная $ parentId.Я хочу получить значение $ 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')

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

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

        },
    ]);
}
0 голосов
/ 18 мая 2018

HI вы можете попробовать вот так

контроллер

$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 из $ data array

...