Я создал объект с ненулевым свойством status
. Компонент рабочего процесса настроен на использование этого свойства для marking store
. Параметр initial_marking
имеет значение draft
.
Сущность всегда имеет некоторый статус, поэтому это свойство не может быть нулевым. Вот почему, когда я хочу создать новый объект, я должен указать его начальное состояние — в данном случае draft
.
Согласно документу
Если вы инициализируете маркировку вызовом $workflow->getMarking($object); то событие workflow.[workflow_name].entered.[initial_place_name] будет вызываться с контекстом по умолчанию (Workflow::DEFAULT_INITIAL_CONTEXT).
Однако это событие не запускается, поскольку свойство статуса объекта уже было установлено на draft
во время создания.
class Training
{
public function __construct(
private string $title,
private string $status,
) {}
}
$training = new Training('title', 'draft');
$trainingStatusStateMachine->getMarking($training); // <- here `workflow.entered.draft` event should be triggered
- Как я могу вызвать это начальное событие в таком случае?
- Какова цель параметра
initial_marking
, если я должен сохранить свою сущность действительной при создании?
добавлено разъяснение
Дело в том, что событие workflow.entered.draft
не срабатывает, поскольку при создании был установлен статус $training
. Вот почему компонент рабочего процесса игнорирует инициирование события, поскольку субъект уже находится в рабочем процессе.
Чтобы исправить ситуацию, я не должен устанавливать статус (оставить его null
) и позволить рабочему процессу установить начальное имя места. Но я не хочу этого делать, потому что не хочу, чтобы моя сущность была недействительной.
Еще одно решение — создать "фальшивый" начальный статус, например init
, и добавить переход от init
к draft
. Такой случай хорош, но тогда опция initial_marking
не имеет смысла.
Как насчет того, чтобы оставить его нулевым, а просто вызвать getMarking при создании объекта? Вы можете просто сохранить ограничение, чтобы сказать, что оно не должно быть обнуляемым, поэтому вы не можете сохранить его, если вы не инициализировали статус
Это может помочь: github.com/symfony/symfony/issues/37421#issuecomment-652293250
Спасибо за ссылку. Я пропустил это обсуждение. Что касается проблемы, я не хочу использовать решение
null
, потому что я хочу, чтобы моя сущность всегда была действительной. "фальшивый" начальный статус лучше для меня.