Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hidenorigoto/743556244914b9c2a3a3 to your computer and use it in GitHub Desktop.
Save hidenorigoto/743556244914b9c2a3a3 to your computer and use it in GitHub Desktop.
Workflow getActivitiLog (一部Haydn利用)

Haydnをコレクション演算部分に適用する例

利用するコード: https://github.com/phpmentors-jp/workflower/blob/master/src/Workflow/Workflow.php#L411

  • ここではコレクションの要素を変換しつつ、変換結果を見てフィルタし、最終オブジェクトへ変換する。HaydnではPHPの配列/連想配列に入っているものなら何でも扱えるので、このようにオブジェクトのコレクションごと変換・フィルタといった操作として記述できる。
public function getActivityLog()
{
$transitionLogSet = new Set(
new SingleColumnArraySource('t', $this->stateMachine->getTransitionLog()));
return $transitionLogSet
->select([function($row) {
return ['f' => $this->getFlowObject($row['t']->getToState()->getStateId())];
}])
->filter(new Matcher(['f'=>function($value) {
return $value instanceof ActivityInterface;
}]))
->select([function($row) {
return ['a' => new ActivityLog($row['f'])];
}]);
}
// ActivityLogCollectionを使っていないので、workItemとの紐付けは行われないが
public function getActivityLog()
{
$activityLogCollection = new ActivityLogCollection();
foreach ($this->stateMachine->getTransitionLog() as $transitionLog) {
$flowObject = $this->getFlowObject($transitionLog->getToState()->getStateId());
if ($flowObject instanceof ActivityInterface) {
$activityLogCollection->add(new ActivityLog($flowObject));
}
}
return $activityLogCollection;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment