В настоящее время я создаю простое управление продуктами, которое использует статус для отслеживания жизненного цикла статуса продуктов. Недавно я добавил новую таблицу под названием «дескрипторы», которая просто product_id
и handle
(простой ввод текста). Для простоты:
Я создал файл ловушки. 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;
}
Это работает безупречно, если порядок обновлений следующий:
- Создать новый
product
со статусом "Черновик" - Добавить новый
handle
и сохранить продукт - Переключить статус на «Подробный»
Это работает, потому что теперь у меня есть «дескриптор», и мой код работает (count()
не ноль, поэтому проверка выше не будет throw UnprocessableEntityException
).
Но что, если мои шаги будут такими:
- Создать новый
product
со статусом «Подробно» (без каких-либо handle
)
Я не мог понять, как написать свой хук, поэтому я мог проверить реляционное поле, которое не сохраняется при использовании item.create.products:before
. Любой намек на то, как я могу проверить реляционное поле, пока оно сохраняется в базе данных?
Заранее спасибо! Любая помощь приветствуется!