Требовать условного входа M2O на крючок - PullRequest
1 голос
/ 02 марта 2020

В настоящее время я создаю простое управление продуктами, которое использует статус для отслеживания жизненного цикла статуса продуктов. Недавно я добавил новую таблицу под названием «дескрипторы», которая просто product_id и handle (простой ввод текста). Для простоты:

enter image description here

Я создал файл ловушки. php, который уже загружен и работает.

$filter = function (Payload $payload) {
  $container = Application::getInstance()->getContainer();

  $itemsService = new ItemsService($container);
  $item = $itemsService->find('products', $payload->get('id'), ['fields' => 'status,handles.*']);

  $statuss = ['detailed'];
  if (in_array($item['data']['status'], $statuss) || in_array($payload->get('status'), $statuss)) {
    if ((!$item['data']['handles'] || !count($item['data']['handles']))) {
      throw new UnprocessableEntityException('Can not publish product without handle!');
    }

  return $payload;
}

Это работает безупречно, если порядок обновлений следующий:

  1. Создать новый product со статусом "Черновик"
  2. Добавить новый handle и сохранить продукт
  3. Переключить статус на «Подробный»

Это работает, потому что теперь у меня есть «дескриптор», и мой код работает (count() не ноль, поэтому проверка выше не будет throw UnprocessableEntityException).

Но что, если мои шаги будут такими:

  1. Создать новый product со статусом «Подробно» (без каких-либо handle)

Я не мог понять, как написать свой хук, поэтому я мог проверить реляционное поле, которое не сохраняется при использовании item.create.products:before. Любой намек на то, как я могу проверить реляционное поле, пока оно сохраняется в базе данных?

Заранее спасибо! Любая помощь приветствуется!

...