【问题标题】:Is there a way to send unselected datas to the controller directly?有没有办法将选定的数据直接发送到控制器?
【发布时间】:2019-12-30 15:26:26
【问题描述】:

我有一个带有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-&gt;getData() 检索“audi”和“opel”值? (当然可以的话)

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    如果字段是表单对象的一部分(本例中为$form),要检索字段carlist 的数据,您可以使用:

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

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

    如果您的字段不是表单对象的一部分,您可以使用:

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

    这样做是从Request object 获取数据。

    【讨论】:

      【解决方案2】:

      你有一个表格,像这样:

      <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'
               * ]
               */
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-02
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 2022-01-17
        相关资源
        最近更新 更多