无法从 Drupal Commerce 2 中的当前会话购物车中获取 order_id

问题描述

在 Drupal 9.1.4 和 Commerce 2 中工作:我正在尝试根据用户的电子邮件地址为用户创建一个用于 discord Access 的唯一代码字符串。我有一个只读的自定义字段 discord_code 附加到认商店中的订单类型注册认小部件应该在放置时将代码写入订单。只有一个订单 - 注册订单。最终,我需要为匿名用户登录用户获取与订单关联的电子邮件。 CurrentUser 不是一个选项,因为对于匿名客户,购买将输入与 currentUser 不同的电子邮件。这是一团糟:

<?PHP

/**
 * @file
 * Contains \Drupal\discord_code\Plugin\Field\FieldWidget\discordCodeDefaultWidget.
 */

namespace Drupal\discord_code\Plugin\Field\FieldWidget;

use Drupal\commerce_order\Entity\Order;
use Drupal\commerce_order\Entity\OrderItem;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Plugin implementation of the 'discordcodes_default' widget.
 *
 * @FieldWidget(
 *   id = "discordcodes_default",*   label = @Translation("discordCode default"),*   field_types = {
 *     "discord_code"
 *   }
 * )
 */
class discordCodeDefaultWidget extends WidgetBase {

/**public function getorderEmail(OrderInterface $order) {
 $eml = isset($eml) ?  $eml : $order->getEmail();
 return $eml;
 }
/**
 * {@inheritdoc}
 */
public function formElement(FieldItemListInterface $items,$delta,array $element,array &$form,FormStateInterface $form_state) {
include 'Code.PHP';
$cart_provider = \Drupal::service('commerce_cart.cart_provider');
$cart = $cart_provider->getCart('default');
$order_id = $cart->get('order_id')->getValue();
$order= \Drupal\commerce_order\Entity\Order::load($order_id);
$eml=$order->getEmail();
$element['discord_code'] = array(
'#title' => $this->t('discord Code'),'#type' => 'textfield','#attributes' => array('readonly' => 'readonly'),'#default_value' => isset($items[$delta]->discord_code) ?  $items[$delta]->discord_code : t('@dcode',array ('@dcode' => disCode($eml))),);
return $element;
}
}

非常感谢任何见解。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)