如何在 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'];
我已经添加了相同的但我只获得了辅助语言配置数据。
我修改了他从配置中获取 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
。
我有以下情况。我有一个带有表单的自定义 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'];
我已经添加了相同的但我只获得了辅助语言配置数据。
我修改了他从配置中获取 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
的路由,就像指南中显示的那样。
我更新了模板
<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
。