【问题标题】:Is it possible to automatically add value to form submission in symfony?是否可以在 symfony 中自动为表单提交添加价值?
【发布时间】:2021-04-21 00:52:26
【问题描述】:

想知道symfony下提交表单时是否可以自动加值?

举例

实体产品

private ref;
private price;
private quantity;
private total;

产品类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
 $builder
 ->add('ref')
 ->add('price')
 ->add('quantity')
 ...
 ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {

  $form = $event->getForm();
  $product = $event->getData();

  $v = $product['price'] * $product['quantity'];

  $form->add('total');
  $form->get('total')->setData($v);
 }

产品控制器

$form = $this->createForm(ProductType::class, $product);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {

**dd($form->getData());**

我要检索$form->getData()中输入的所有值: -ref -价钱 -数量 -total(自动添加该字段及其值)

尽管我阅读过,但我仍然不明白它是如何工作的。有可能吗?

我从来没有得到所有的数据

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    修改

    $form->add('total');
    $form->get('total')->setData($v);
    

    $product['total'] = $product['price'] * $product['quantity'];
    

    并将事件更改为POST_SUBMIT

    此外,如果您想直接将表单绑定到对象,请查看data_class 属性

    【讨论】:

      【解决方案2】:

      据我了解,您拥有 Product 实体(或简称为类)。因此,您可以创建一个返回 price * quantity 值的 getter,并在表单提交后在控制器上调用它。

      class Product {
          private $ref;
          private $price;
          private $quantity;
      
          // getters and setters or another logic what you need
      
          public function getTotal() {
              return $this->price * $this->quantity;
          }
      }
      
      class ProductType extends AbstractType {
          public function buildForm(FormBuilderInterface $builder, array $options) {
              $builder
                  ->add('ref')
                  ->add('price')
                  ->add('quantity');
              
              // other code
          }
      }
      
      class ProductController extends AbstractController {
          public function __invoke(Request $request) {
              $form = $this->createForm(ProductType::class, $product);
              $form->handleRequest($request);
              
              if ($form->isSubmitted() && $form->isValid()) {
                  dd($product->getTotal());
              }
              
              // other code
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-19
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 2018-01-08
        • 1970-01-01
        • 2016-10-26
        相关资源
        最近更新 更多