Haydnをコレクション演算部分に適用する例
利用するコード: https://github.com/phpmentors-jp/workflower/blob/master/src/Workflow/Workflow.php#L411
- ここではコレクションの要素を変換しつつ、変換結果を見てフィルタし、最終オブジェクトへ変換する。HaydnではPHPの配列/連想配列に入っているものなら何でも扱えるので、このようにオブジェクトのコレクションごと変換・フィルタといった操作として記述できる。
Haydnをコレクション演算部分に適用する例
利用するコード: https://github.com/phpmentors-jp/workflower/blob/master/src/Workflow/Workflow.php#L411
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; | |
} |