Symfony 3:如何在Twig中获取EntityType表单字段对象的字段数据
嘿,这事儿好办!你已经用Symfony的EntityType创建了两个展开式的表单字段,现在想在Twig模板里拿到选中对象的字段数据对吧?我给你分两种常用场景来说明:
场景1:表单提交验证通过后获取数据
当用户提交表单且验证通过时,你可以在控制器里先拿到选中的实体对象,再把它们传给Twig模板使用。
控制器示例代码
public function yourFormAction(Request $request) { // 实例化你的表单(假设表单类是YourCustomFormType) $form = $this->createForm(YourCustomFormType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // 直接从表单字段获取选中的Supplier实体对象 $selectedSupplier = $form->get('supplier')->getData(); // 获取选中的Payment实体对象 $selectedPayment = $form->get('payment')->getData(); // 将对象传递给Twig模板 return $this->render('result_template.html.twig', [ 'selectedSupplier' => $selectedSupplier, 'selectedPayment' => $selectedPayment, ]); } // 表单未提交或验证失败时,渲染表单页面 return $this->render('form_template.html.twig', [ 'form' => $form->createView(), ]); }
Twig模板中访问字段
在Twig里,你可以直接通过实体的属性名(Symfony会自动调用对应的getter方法)来获取字段值:
{# 显示选中供应商的pubName #} <div>选中的供应商:{{ selectedSupplier.pubName }}</div> {# 如果实体有其他字段,比如id、contactInfo,也可以直接访问 #} <div>供应商ID:{{ selectedSupplier.id }}</div> {# 显示选中支付方式的pubName #} <div>选中的支付方式:{{ selectedPayment.pubName }}</div>
场景2:在表单渲染模板中获取选中值(编辑/提交后回显)
如果是在渲染表单的模板里(比如编辑已有数据的页面,或者提交后显示表单+选中结果),你可以直接从表单视图的变量里取选中的实体:
{# 获取当前选中的Supplier对象 #} {% set selectedSupplier = form.supplier.vars.data %} {% if selectedSupplier %} <p>当前选中的供应商:{{ selectedSupplier.pubName }}</p> {% endif %} {# 获取当前选中的Payment对象 #} {% set selectedPayment = form.payment.vars.data %} {% if selectedPayment %} <p>当前选中的支付方式:{{ selectedPayment.pubName }}</p> {% endif %}
小提醒
- 因为你设置了
expanded: true且默认multiple: false,所以每个字段返回的是单个实体对象;如果以后开启multiple: true(多选),那返回的就是对象数组,需要用for循环遍历哦。 - 确保你的
Supplier和Payment实体类有对应的getter方法(比如getPubName()),这样Twig才能正常访问到字段值~
内容的提问来源于stack exchange,提问作者Rallyholic
相关产品推荐
相关产品推荐

