是否可以将未选择的数据直接发送到控制器?

时间:2019-12-30 15:26:26

标签: php forms symfony

我有一个带有ChoiceType字段的表单,我需要对选定的数据执行某些操作,而对未选定的数据执行其他操作。

我认为我需要使用选定的数据来检索未选定的数据,但是有没有办法将它们直接发送到控制器?也许与empty_data一起使用,但是我不确定如何使用它。

要弄清我是否在Vue中:

<select name="carlist" form="carform" multiple>
  <option value="volvo" selected>Volvo</option>
  <option value="saab" selected>Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

如何使用$form->getData()检索“ audi”和“ opel”值? (当然可以)

2 个答案:

答案 0 :(得分:0)

如果field是表单对象的一部分(在此示例中为$form),则可以使用以下字段来检索字段carlist的数据:

$carlist = $form->get('carlist');

或者,要从整个表单中获取数据,您可以使用:$data = $form->getData()

如果您的字段不属于表单对象,则可以使用:

$carlist = $request->request->get('carlist');

这是从Request object获取数据。

答案 1 :(得分:0)

您有一个这样的表格:

<select name="carlist" form="carform" multiple>
  <option value="volvo" selected>Volvo</option>
  <option value="saab" selected>Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

您的控制器:

    $form = $this->createForm(YourForm::class, //...);

    $choices = [
        'Volvo' => 'volvo',
        'Saab'  => 'saab',
        'Opel'  => 'opel',
        'Audi'  => 'audi',
    ];
    $form->add('carlist', ChoiceType::class, [
        'multiple' => true,
        'choices' => $choices
    ]);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $not_used_cars = [];
        $car_list = $form->get('carlist')->getData();
        foreach ($choices as $car) {
            if ( false === array_search( $car, $car_list ) )
                $not_used_cars[] = $car;
        }
        /*
         * dump($not_used_cars);
         * //Output:
         * [
         *      0 => 'opel'
         *      1 => 'audi'
         * ]
         */
    }