インスタンスを作る際には、ServerRequestInterfaceに縛られたリクエストをコンストラクタで受け取るようにしています。スーパーグローバル変数を用いてリクエストから値を取り出していました。依存した設計になっているためこのような形で実装しています。ような動的URLが存在するため、これについても取り扱えるようにする必要があります。以下のように書くことで、ルーターで処理されたURLに含まれる動的なパラメータについても安全に値を検証し取得することができます。DDD(ドメイン駆動設計)においてもドメインモデルの重要な分類として言及されている考え方です。特定の概念を表したクラスのことでUserIdやArticleIdなどが例に挙げられます。IDを表す単なるint型の値に代えてValueObjectを導入することで、特定の概念固有の条件を隠蔽することができ、可読性が向上したり値の取り違えを防げます。内包する値のバリデーションを含めて、以下のようなValueInterfaceを定義しました。bool;}ValueInterfaceでは静的メソッドとして値のバリデーションメソッドの実装を要件としています。ArticleIdが内包する数値は「0以上の正整数」である場合、以下のような実装になります。}}このValueObjectをRequestParamFilterを通してマッピングできるようにしていきます。RequestParamFilter::asValueObject()の実装は以下の通りです。}}RequestParamFilter::asValueObject()を使うと、以下のような形でValueObjectをマッピングできます。int(1)受け取った値をRequestParamFilterの中でValueObjectのインスタンスにマッピングすることで、このあと行う処理で値を取り違えることがなくなりますし、毎回複雑で長い条件を書く必要もなくなります。RequestParamFilter::asValueObject()は型パラメータ(ジェネリクス)により、ValueInterfaceではなくパラメータで渡したクラス名に応じた具象クラスに型付けされています。ピクシブ百科事典にやってきました。ピクシブ百科事典は2009年にサービスを開始してから今年で13年目となります🎉レガシーコードも多く、まだまだ対応が必要な箇所は山積みですが一つ一つ紐解きモダンなコードへ改善を進めていきます。2022に協賛しています。phperkaigi.jpピクシブ百科事典を開発しているtadsanも「PSR-7とPSR-15によるWebアプリケーション実装パターン」として、RequestParamFilterにも言及するようです。fortee.jpまた、tadsanがPHPerKaigiの頃までに汎用化したバージョンをOSSとして公開する予定があるようです。ご期待ください...?ふじしゃんWebエンジニアリングチームでアルバイトとして働いています。古のコードをいい感じにリファクタリングすることとブロックチェーンが好きです。MEETUP2024-10-30pixivというシステムはどんな形をしているのか、それはなぜか。insideは、ピクシブ株式会社が運営するオウンドメディアです。Reserved.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。