EC-CUBE / next-poc

Other
2 stars 4 forks source link

抽象化レイヤー: Symfony/HttpFoundation #33

Open kiy0taka opened 1 year ago

kiy0taka commented 1 year ago

PSR-7との統合を検証。

PSR-7

昔はこんな感じでつかえた https://medium.com/@Inviqa/an-introduction-to-psr-7-in-symfony-d723c00385b

が、SensioFrameworkExtraBundle: 6.xでサポート終了宣言 https://github.com/sensiolabs/SensioFrameworkExtraBundle/pull/710

fabpotさんいわく、おすすめしないとのこと I've never used it myself and would never recommend anyone to use it anyway, it adds overhead for no benefits

symfonyチームはpsr-7を支持してないようす https://twitter.com/nicolasgrekas/status/1310858332442370048 https://twitter.com/nicolasgrekas/status/1310863527574474752

新しい実装としては以下がある https://github.com/symfony/psr-http-message-bridge/pull/89 https://github.com/symfony/recipes/pull/899

以下のようなコードになります。 https://github.com/EC-CUBE/next-poc/pull/25

Symfony\Component\HttpFoundation\Response

アダプタを作成する

Symfony\Component\HttpFoundation\BinaryFileResponse

アダプタを作成する 引数や例外に以下の依存があるため考慮する必要あり。

Symfony\Component\HttpFoundation\JsonResponse

コントローラ内で以下のように利用している。直接インスタンスを生成している箇所はない。

$this->json();

アダプタを作成する BinaryFileResponseとは異なり関連する依存はない。

AbstractController::json()ではアダプタを返すようにする。

Symfony\Component\HttpFoundation\RedirectResponse

コントローラ内で以下のように利用している。直接インスタンスを生成している箇所はない。

$this->redirectToRoute('admin_setting_shop_payment');

アダプタを作成する BinaryFileResponseとは異なり関連する依存はない。

AbstractController::redirectToRoute()ではアダプタを返すようにする。

Symfony\Component\HttpFoundation\StreamedResponse

アダプタを作成する BinaryFileResponseとは異なり関連する依存はない。 AbstractController::stream()ではアダプタを返すようにする。

Symfony\Component\HttpFoundation\Cookie

アダプタを作成する 単純な継承でよさそう。

Symfony\Component\HttpFoundation\File\Exception\FileException

EC-CUBEの例外に変換する

Symfony\Component\HttpFoundation\File\File

アダプタを作成する

以下の例外を投げている箇所はEC-CUBEの例外に変換する

Symfony\Component\HttpFoundation\File\UploadedFile

アダプタを作成する

以下の例外を投げている箇所はEC-CUBEの例外に変換する

Symfony\Component\HttpFoundation\Request

https://github.com/EC-CUBE/next-poc/pull/14

Symfony\Component\HttpFoundation\RequestStack

https://github.com/EC-CUBE/next-poc/pull/14

Symfony\Component\HttpFoundation\ResponseHeaderBag

定数の利用のみ。代替の定数を作成。 https://github.com/EC-CUBE/next-poc/blob/main/src/application/Eccube/Controller/Admin/Store/TemplateController.php#L166

Symfony\Component\HttpFoundation\Session\Session

https://github.com/EC-CUBE/next-poc/pull/15

Symfony\Component\HttpFoundation\Session\SessionInterface

https://github.com/EC-CUBE/next-poc/pull/15

kiy0taka commented 1 year ago

Response系はすべてAbstractControllerでアダプターを返すファクトリーメソッドを追加する。 ResponseHeaderBag::DISPOSITION_ATTACHMENT は代替定数の作成ではなくて、AbstractController#attachmentFile(...) のようなファクトリーメソッドが良いかと。