如何在 shopware6 的控制器中获取本地化的 CMS 元素配置数据

How to get localized CMS Element config data in controller of shopware6

我有以下情况。我有一个带有表单的自定义 CMS 元素,我通过编写的 JS 插件中的 AJAX 将数据发送到自定义控制器。现在我想从 CMS-Element Config 中读取信息。我窥视了 Contact-Form 的源代码,并在他们读出配置的控制器中结束。我在我的控制器中实现了它,基本上它可以工作,但唯一不起作用的是我总是得到一种语言(德语)的配置。 我的主要语言是英语,第二语言是德语。

我从指南中获取了“Dailymotion”示例。并将其与其他指南中的代码融合在一起以进行 AJAX 调用。 (用于测试目的)

https://developer.shopware.com/docs/guides/plugins/plugins/content/cms/add-cms-element https://developer.shopware.com/docs/guides/plugins/plugins/storefront/add-dynamic-content-via-ajax-calls

ContactForm (ContactFormRoute.php) 的源代码中包含

$mailConfigs['receivers'] = $slot->getEntities()->first()->getTranslated()['config']['mailReceiver']['value'];

https://github.com/shopware/platform/blob/d6c853ca3b6b167d61d70e6329f4fcface5c5245/src/Core/Content/ContactForm/SalesChannel/ContactFormRoute.php#L182

我已经添加了相同的但我只获得了辅助语言配置数据。 我修改了他从配置中获取 dailyUrl 值的代码。

我注意到,在我的 $context 中,languageIdChain 包含联系人中的两种语言 ID(第一个是德语),只有当前语言的 languageId

这些是 languageIdChain 以英语发送的上下文。 (2fbb5fe2e29a4d70aa5854ce7ce3e20b 是英语)

联系表单控制器的上下文 languageIdChain:

  #languageIdChain: array:1 [
    0 => "2fbb5fe2e29a4d70aa5854ce7ce3e20b"
  ]

我的控制器的上下文 languageIdChain:

  #languageIdChain: array:2 [
    0 => "2d7d7d698f634a04b5796e49aa846ae6"
    1 => "2fbb5fe2e29a4d70aa5854ce7ce3e20b"
  ]

好的,你知道你挣扎了好几个小时的时刻,尝试这个那个然后做 Stack Overflow post 半小时后你自己找到解决方案。

为什么我总是得到德语数据而不是当前语言的数据的原因是我的 AJAX 调用总是调用德语 /example 的路由,就像指南中显示的那样。 我更新了模板

,而不是在 JS-Plugin 中使用硬编码 URL
<button id="ajax-button" data-url="{{path('frontend.example.example.submit')}}">Button</button>

在我的 JS 插件中,我刚刚读出了 data-url

this.button = this.el.children['ajax-button'];
this.actionUrl = this.button.dataset.url;

通过这种方式,我可以根据当前语言获得 url /example/en/example