Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kiy0taka opened this issue Apr 27, 2023 · 1 comment
Open

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

kiy0taka opened this issue Apr 27, 2023 · 1 comment
Assignees

Comments

@kiy0taka
Copy link
Contributor

kiy0taka commented Apr 27, 2023

PSR-7との統合を検証。

PSR-7

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

が、SensioFrameworkExtraBundle: 6.xでサポート終了宣言
sensiolabs/SensioFrameworkExtraBundle#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

新しい実装としては以下がある
symfony/psr-http-message-bridge#89
symfony/recipes#899

以下のようなコードになります。
#25

  • XxxResponseはそれぞれ実装が必要そう。
  • RequestStackはアダプタが必要。
  • UploadFileは実装がある。
  • Cookieは他の実装探すか作るか必要かも
  • 思想の異なるpsr-7とsymfonyの実装が混在するととてもややこしくなるので、psr-7準拠するなら結構作り込まないといけないかも。

Symfony\Component\HttpFoundation\Response

アダプタを作成する

Symfony\Component\HttpFoundation\BinaryFileResponse

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

  • Symfony\Component\HttpFoundation\File\Exception\FileException;
  • Symfony\Component\HttpFoundation\File\File;

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\Exception\FileException;
  • Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;

Symfony\Component\HttpFoundation\File\UploadedFile

アダプタを作成する

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

  • Symfony\Component\HttpFoundation\File\Exception\CannotWriteFileException;
  • Symfony\Component\HttpFoundation\File\Exception\ExtensionFileException;
  • Symfony\Component\HttpFoundation\File\Exception\FileException;
  • Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
  • Symfony\Component\HttpFoundation\File\Exception\FormSizeFileException;
  • Symfony\Component\HttpFoundation\File\Exception\IniSizeFileException;
  • Symfony\Component\HttpFoundation\File\Exception\NoFileException;
  • Symfony\Component\HttpFoundation\File\Exception\NoTmpDirFileException;
  • Symfony\Component\HttpFoundation\File\Exception\PartialFileException;

Symfony\Component\HttpFoundation\Request

#14

Symfony\Component\HttpFoundation\RequestStack

#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

#15

Symfony\Component\HttpFoundation\Session\SessionInterface

#15

@kiy0taka
Copy link
Contributor Author

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

@chihiro-adachi chihiro-adachi removed their assignment Jun 20, 2023
@kiy0taka kiy0taka self-assigned this Jun 22, 2023
@kiy0taka kiy0taka mentioned this issue Jun 22, 2023
15 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

No branches or pull requests

2 participants