【问题标题】:Symfony 4 - How to access variable from Controller to FormTypeSymfony 4 - 如何从控制器访问变量到 FormType
【发布时间】:2018-05-18 04:41:02
【问题描述】:

我的 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')

怎么做?

【问题讨论】:

  • 请从标题中删除“[已解决]”:接受答案是将其标记为已解决的方式。
  • 完成,谢谢您的帮助!!!

标签: forms symfony variables controller


【解决方案1】:

将其作为必需(强制)选项传递给您的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)

        },
    ]);
}

【讨论】:

    【解决方案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.
        }
    }
    

    您可以从 $data 数组中访问 parentId

    【讨论】:

    • 我想他们可以尝试一下,但它不起作用。至少从 Symfony 2.7 开始没有。在过去 5 年左右的时间里,情况发生了变化。
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2019-11-30
    • 2017-09-22
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多