Превышение 10 вложенных форвардов? - PullRequest
0 голосов
/ 10 декабря 2018

Для моего проекта требуется несколько платежных шлюзов, поэтому я настроил модуль для каждого платежного шлюза и привязал соответствующий платежный шлюз к учетной записи, которая его использовала.Затем я разместил весь код оплаты в соответствующем модуле контроллера.Все шлюзы реализуют один и тот же интерфейс для обеспечения существования функций.

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

$response = $this->forward()->dispatch(sprintf('PaymentGateway\%s\Controller\Index', ucwords($pg->code)), $params);

, где $pg->code - это платежный шлюз, назначенный дляаккаунт.

На данный момент у меня есть два платежных шлюза (это будет в ближайшем будущем) с примерно 20 тестовыми платежами, которые будут обрабатываться каждый.Когда я запускаю команду cron, я получаю сообщение об ошибке:

Обнаружена циркулярная пересылка: больше 10 вложенных форвардов

В этом сценарии она должна быть запущена 40 раз,но это будет расти в будущем, так как будет добавлено больше платежных шлюзов и больше транзакций.

С точки зрения решения, я хочу либо

  • отключить эту проверку дляцели моего cron или,
  • найти альтернативу $this->forward()->dispatch(...);, которая все еще позволит мне несколько раз вызывать другой контроллер с пользовательскими параметрами.

Альтернативой является то, что япередать все транзакции каждому соответствующему платежному шлюзу и вызывать $this->forward()->dispatch() только один раз для каждого шлюза, но я снова столкнусь с этой проблемой, когда доберусь до десяти платежных шлюзов.

1 Ответ

0 голосов
/ 11 декабря 2018

Плагин контроллера forward позволяет вам установить максимальное количество вложенных форвардов.

Перед моим циклом я установил максимальное количество вложенных форвардов равным количеству элементов, через которые я собирался пройти:

$this->forward()->setMaxNestedForwards(count($transactions));
...