読者です 読者をやめる 読者になる 読者になる

あざらし備忘録。

渋谷ではたらく音ゲー大好きウェッブエンジニアがいろいろ思った事やった事を書いていくブログです

AASMライクなPHP用StateMachine 1.1.0 released!![PHP][Doctrine]

以前このブログでも紹介した、

shiro-goma.hatenablog.com

PHP用のステートマシンライブラリのv1.1.0を公開しました!

Rubyの有名なステートマシンgemであるaasm/aasm · GitHubぽいカジュアルに使えるステートマシンが欲しくて開発しています。

v1.0.0ではステートマシンとしての最小限の機能である状態遷移を管理する機能のみを提供していましたが、v1.1.0では以下のような機能を追加しました。

  • 間違った遷移をしようとした時に例外を投げるのではなくfalseを返すようにするオプションの実装(WhinyTransitions)
  • 直接代入による状態遷移を向こうにするオプションの実装(NoDirectAssignment)
  • コールバックメソッドの有効化(Callbacks)
    • イベント開始前(beforeEvent)
    • 旧状態退出前(beforeExit)
    • 旧状態退出時(exit)
    • 新状態入場前(beforeEnter)
    • 新状態入場時(enter)
    • 遷移後(afterTransition)
    • 旧状態退出後(afterExit)
    • 新状態入場後(afterEnter)
    • イベント終了後(afterEvent)
  • 引数を伴うコールバックメソッドへの対応
  • 状態名取得メソッドの実装

これで色々なフックポイントでコールバックメソッドを実行できるようになったので、痒いところに手が届きやすくなったかなーと思っています!

また、状態名を取得するメソッドも用意出来たので、これで定数などで状態名を保持するような二重管理っぽい状況も打破できそうです:)

リポジトリは以下です。

github.com

設定ファイル不要でアノテーションだけで状態管理できるようになるのでお手軽ですよー! また、Symfony2でお馴染みのDoctrineが提供しているアノテーション機能を用いて作成していますが、Symfony2で無くてもプレーンなPHPに対して使用可能になっているのでぜひどうぞ。

せっかく作ったライブラリなので普通に使えるようにしっかり育て続けていきたいと思います!