Php 是否可以在symfony中自动为表单提交添加值?
我想知道我是否可以自动添加值在symfony下提交表格时 例如 实体产品Php 是否可以在symfony中自动为表单提交添加值?,php,forms,symfony,Php,Forms,Symfony,我想知道我是否可以自动添加值在symfony下提交表格时 例如 实体产品 private ref; private price; private quantity; private total; 产品类型 public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('ref') ->add('price') ->add('quantity')
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()中输入:
-参考号
-价格
-数量
-总计(自动添加此字段及其值)
尽管我读了很多书,但我还是不明白它是如何工作的。可能吗
我从来没有得到所有的数据
$form->add('total');
$form->get('total')->setData($v);
到
并将事件更改为POST\u SUBMIT
此外,如果您想直接将表单绑定到对象,请查看属性,因为我知道您拥有产品实体(或简单的类)。因此,您可以创建一个getter,返回
price*quantity
的值,并在表单提交后在控制器上调用它
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 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
}
}