如何在Pimcore的AreaBrick中通过TWIG输出pimcore_relation关联对象属性
问题描述
我有一个同时用于CMS页面和控制器模板的AreaBrick模板:
{% set phrase_field = pimcore_input( 'phrase', { 'placeholder': 'website.phrase'|trans, "reload": true, "width": 600 } ) %} {% if phrase is not defined or phrase is empty %} {% set phrase = phrase_field.data %} {% endif %} {% set company_field = pimcore_relation( 'companyRelation', { "types": ["object"], "classes": ["Company"], "reload": true, "width": 600 } ) %} {# company_name可由渲染模板的控制器提供 #} {% if company_name is not defined or company_name is empty %} {% set company_name = company_field.data %} {% endif %} {% if editmode %} {{ phrase_field|raw }} {{ company_field|raw }} {% endif %} {{ phrase }} {{ company_name.name }}
pimcore_input字符串字段使用完全正常,但pimcore_relation关联字段仅能拿到包含对象ID的数组,示例中company_name的值为:
array:3 [▼ "id" => 1234 "type" => "object" "subtype" => "object" ]
请问如何输出关联对象的属性(例如name)?
解决方案
方法1:在Twig模板中直接加载完整对象
当company_field.data返回的是ID关联数组时,用Pimcore内置的pimcore_object()函数通过ID加载完整的Company对象:
{% set company_field = pimcore_relation( 'companyRelation', { "types": ["object"], "classes": ["Company"], "reload": true, "width": 600 } ) %} {% if company_name is not defined or company_name is empty %} {% set company_relation_data = company_field.data %} {# 通过ID加载关联的Company对象 #} {% set company_name = pimcore_object(company_relation_data.id) %} {% endif %} {# 空值判断避免对象不存在时报错 #} {% if company_name is not null %} {{ company_name.name }} {% endif %}
方法2:在控制器中预处理关联对象
如果模板由控制器渲染,建议在控制器里提前加载好完整对象再传递给模板,这样模板逻辑更简洁:
// 控制器示例代码 public function renderAction() { $companyRelationData = $this->getParameter('companyRelation'); $company = null; // 存在关联ID时加载对象 if ($companyRelationData && isset($companyRelationData['id'])) { $company = \Pimcore\Model\DataObject\Company::getById($companyRelationData['id']); } return $this->render('your-template.html.twig', [ 'company_name' => $company ]); }
此时模板里可以直接使用{{ company_name.name }},无需额外处理。
注意事项
- 必须添加空值判断,防止关联对象被删除或未选择时抛出错误。
- 编辑模式下,
pimcore_relation字段的后台选择器不受影响,正常显示操作界面。
内容的提问来源于stack exchange,提问作者Eugene Kaurov
相关产品推荐
相关产品推荐

