1

Тема: Обращение к классу из своего модуля в handlers

Приветствую!
На событие изменения заказа и handlers пытаюсь вызвать класс Cdek2.
Подключил его через use
создаю экземпляр $api = new Cdek2()
обращаюсь к методу $api->createDeliveryOrder($order), в котором содержится другой класс createOrder($order) , но возникает ошибка, что передается null в createOrder, но я же передаю заказ.

Подскажите пожалуйста, что я делаю не то и как обратиться правильно из стороннего модуля.

Спасибо

Повысить оценку Понизить оценку

2

Re: Обращение к классу из своего модуля в handlers

Вы уверены, что у вас в переменной $order - есть объект заказа?
Покажите код вашего обработчика в handlers.

Повысить оценку Понизить оценку

3 Отредактировано Redaktor (22.03.2024 15:35:05)

Re: Обращение к классу из своего модуля в handlers

use RS\Event\HandlerAbstract;
use Shop\Model\DeliveryType\Cdek2;
use Shop\Model\DeliveryType\Cdek\CdekApi;

class Handlers extends HandlerAbstract {

function init()
    {
        $this->bind('order.change');
    }

public static function orderChange($param)
{
$order = $param['order'];
$api = new Cdek2();
if ($order->is_payed) {
  $deliveryOrderEx = new Cdek2();
  $deliveryOrderEx->createDeliveryOrder($order);
  }
}
}

В итоге ошибка:

Исключение - "Call to a member function createOrder() on null"
Код ошибки:    0
Тип ошибки:    Error
Файл:    C:\OSPanel\domains\site\modules\shop\model\deliverytype\cdek2.inc.php
Строка:    627
Стек вызова:
#0 C:\OSPanel\domains\site\modules\mymodule\config\handlers.inc.php(192): Shop\Model\DeliveryType\Cdek2->createDeliveryOrder()
echo '<pre>';var_dump($order);echo '</pre>';
возвращает object(Shop\Model\Orm\Order)

Повысить оценку Понизить оценку

4

Re: Обращение к классу из своего модуля в handlers

Вам нужно немного по другому получить объект класса Cdek2.

$cdek2 = $order->getDelivery()->getTypeObject();
if ($cdek2 instanceof \Shop\Model\DeliveryType\Cdek2) {
    $cdek2->createDeliveryOrder($order);
}

Повысить оценку Понизить оценку

5 Отредактировано Redaktor (26.03.2024 14:58:37)

Re: Обращение к классу из своего модуля в handlers

admin пишет:

Вам нужно немного по другому получить объект класса Cdek2.

$cdek2 = $order->getDelivery()->getTypeObject();
if ($cdek2 instanceof \Shop\Model\DeliveryType\Cdek2) {
    $cdek2->createDeliveryOrder($order);
}

Спасибо!
Во всех случаях обращения к внешним классам нужно проверять принадлежность или это только сдэк такой?

Повысить оценку Понизить оценку

6

Re: Обращение к классу из своего модуля в handlers

Все экземпляры расчетных классов доставки должны получаться по цепочке из заказа.

Так как в этом случае в них происходит загрузка параметров доставки,
выставленных в админ.панели для конкретной доставки.

Повысить оценку Понизить оценку

7

Re: Обращение к классу из своего модуля в handlers

А подскажите пожалуйста тогда как обратиться к классу Shop\Model\DeliveryType\Cdek\CdekApi к его методу createCallCourier.
Пишет не указаны API

Повысить оценку Понизить оценку

8 Отредактировано Redaktor (30.03.2024 00:25:58)

Re: Обращение к классу из своего модуля в handlers

Отвечу на свой же вопрос, может кому пригодится автоматом создавать заказ в сдэк только после оплаты заказа и вызывать автоматом курьера))

$cdek2 = $order->getDelivery()->getTypeObject();
if ($cdek2 instanceof \Shop\Model\DeliveryType\Cdek2) {
    $cdek2->createDeliveryOrder($order);
}
$cdekApi = new CdekApi();
$cdekApi->setTypeObject($cdek2);
if ($cdekApi instanceof Shop\Model\DeliveryType\Cdek\CdekApi) {
    ...вызов курьера
    $cdekApi->createCallCourier
}

Повысить оценку +1 Понизить оценку