私のアプリケーションでは、ユーザーは 3 種類のライセンスにサインアップできます。すべての人が利用できる無料のライセンス、支払いが必要なサブスクリプション ライセンス (外部の当事者によって管理されます)、および請求書がライセンスされているため、私たちに連絡する必要があります。 .
ユーザーは、登録時または後でプロファイルからライセンスを選択できます。これらは、異なるメソッドを持つ 2 つの異なるコントローラーです。
User と License エンティティを受け取り、ユーザーが正しいライセンスにサインアップするすべてのロジックを処理するsubscription.manager
サービス メソッドがあります。subscribe(User $user, License $license)
ユーザーが選択したライセンスに基づいて、結果は異なります。
- 無料を選択した場合は、お礼のページにリダイレクトされます
- 請求書を選択すると、請求書を要求したことを確認するページにリダイレクトされます。
- サブスクリプションを選択した場合、最初に支払いページにリダイレクトする必要があります。
最後のオプションは単純RedirectResponse
ですが、既存のライセンス サブスクリプションを登録したのか、単に変更したのかに基づいて、さまざまなページを表示したいと考えています。
これを処理する最良の方法は何ですか?
現時点では、私はこれを行います:
$response = $this->get('subscription.manager')->subscribe($user, $license);
switch (true) {
case $response instanceof SuccessResponse:
return $this->redirect('success_url');
break;
case $response instanceof RequestedResponse;
return $this->redirect('requested_url');
break;
case $response instanceof RedirectResponse:
return $response;
break;
default:
throw new \Exception('Response not recognized');
}
SuccessResponse
とRequestedResponse
は、私が作成した単純なクラスであり、それ自体はほとんどまたはまったく情報を保持していません。メソッドで何が起こったかを純粋に示しています。
これにより、このブロックをコピーして貼り付けるだけで、成功した URL と要求された URL を切り替えることができます。ただし、これはあまり最適ではないように感じます。これを行うより良い方法はありますか?
成功と要求された応答 (Redirect または Render のいずれか) を作成し、それらをサービス メソッドに渡すことができると思います。しかし、それは私が単一責任の原則に違反しているように感じます.