ShippingOrderProcessor плохо зарегистрирован?

Oct 21 2020

Я пытаюсь реализовать решение @jsacksick, которое должно принудительно отображать стоимость доставки на странице корзины (обычно на этом этапе его еще нет). Я создал для этого новый модуль, и его структура проста:

shipping_fix
  src
    ShippingOrderProcessor.php
  shipping_fix.info.yml
  shipping_fix.module
  shipping_fix.services.yml

ShippingOrderProcessor.php является точной копией класса @jsacksick: https://gist.github.com/jsacksick/fde031197df92236ef5a916775e17a2e

информационный файл содержит:

name: Shipping fix
description: Fixes missing shipping info on cart page
type: module
core: 8.x
dependencies:

файл модуля пуст, а файл услуг содержит:

services:
  shipping_fix.shipping_order_processor:
    class: Drupal\shipping_fix\ShippingOrderProcessor
    tags:
      - { name: commerce_shipping.shipping_order_processor, priority: -300 }

Но это не работает. Я пытался установить точки останова внутри __construct()и process()методы этого класса, но они никогда не достигаются.

Пытался изменить последнюю строку здесь на:

 - { name: commerce_order.order_processor, priority: -300 }

как объяснено здесь: https://docs.drupalcommerce.org/commerce2/developer-guide/orders/order-refresh-and-process

а потом мой сайт вылетает, когда я пытаюсь очистить кеш?

Так что мне кажется, что я плохо зарегистрировал этот объект процессора. Скорее всего, проблема в файле услуг, но я не могу понять, что это (" commerce_shipping.shipping_order_processor " - правильное значение?).

Пробовал демпинговые сервисы с drush вроде:

drush devel:services
drush devel-container-services
drush devel-services

и даже режим разработки включается для каждой попытки, которую я получаю: команда "devel-container-services" не определена. или похожие.

Я, конечно, активировал свой модуль, пробовал очищать кеши, но не помогло.

Обновление: ошибка, которую я получаю, когда меняю последнюю строку файла служб на:

 - { name: commerce_order.order_processor, priority: -300 }

является:

Служба shipping_fix.shipping_order_processor для потребителя commerce_order.order_refresh не реализует Drupal \ commerce_order \ OrderProcessorInterface.

И файл ShippingOrderProcess.php начинается с:

<?php declare(strict_types=1);

namespace Drupal\my_module\OrderProcessor;

use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\OrderProcessorInterface;
use Drupal\commerce_shipping\ShipmentManagerInterface;
use Drupal\commerce_shipping\ShippingOrderManagerInterface;
use Drupal\profile\Entity\Profile;

/**
 * Ensures there are shipments from the start.
 */
final class ShippingProcessor implements OrderProcessorInterface {

  /**
   * The shipping order manager.
   *
   * @var \Drupal\commerce_shipping\ShippingOrderManagerInterface
   */
  protected $shippingOrderManager; /** * The shipment manager. * * @var \Drupal\commerce_shipping\ShipmentManagerInterface */ protected $shipmentManager;


  public function __construct(ShippingOrderManagerInterface $shippingOrderManager, ShipmentManagerInterface $shipmentManager) {
    $this->shippingOrderManager = $shippingOrderManager;
    $this->shipmentManager = $shipmentManager;
  }

...

Обновление 2:

Удалось очистить кеш: для моей файловой структуры пространство имен должно быть:

namespace Drupal\shipping_fix;

Также изменился файл servies, и теперь он выглядит так:

services:
  shipping_fix.shipping_order_processor:
    class: Drupal\shipping_fix\ShippingProcessor
    arguments: ['@commerce_shipping.order_manager', '@commerce_shipping.shipment_manager']
    tags:
      - { name: commerce_order.order_processor, priority: -300 }

Теперь очистка кеша работает, но я все еще не вижу стоимость доставки на странице корзины ...

Ответы

NoSssweat Oct 22 2020 at 12:01

В этом случае вы захотите запустить это перед commerce_shipping.early_order_processor, установите приоритет 300

services:
  shipping_fix.shipping_order_processor:
    class: Drupal\shipping_fix\ShippingProcessor
    arguments: ['@commerce_shipping.order_manager', '@commerce_shipping.shipment_manager']
    tags:
      - { name: commerce_order.order_processor, priority: 300 }