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

注文手続でフォームエラーが返ると fatal error となる不具合を修正 #5345

Merged

Conversation

pineray
Copy link
Contributor

@pineray pineray commented Apr 6, 2022

概要(Overview・Refs Issue)

注文手続きのフォームでエラーが返ると fatal error となる。
ShoppingController の confirm アクションでは、フォームエラーの場合にテンプレートを差し替えてフォームを表示するよう意図されているが、パラメーターが不十分なためにエラーとなっている。

方針(Policy)

エラーとなっている箇所で必要とされているパラメーターを、テンプレート差し替えの際に提供する。

実装に関する補足(Appendix)

注文手続きで「お問い合わせ」欄に3,001文字以上入力して送信すると再現できます。

マイナーバージョン互換性保持のための制限事項チェックリスト

  • 既存機能の仕様変更はありません
  • フックポイントの呼び出しタイミングの変更はありません
  • フックポイントのパラメータの削除・データ型の変更はありません
  • twigファイルに渡しているパラメータの削除・データ型の変更はありません
  • Serviceクラスの公開関数の、引数の削除・データ型の変更はありません
  • 入出力ファイル(CSVなど)のフォーマット変更はありません

レビュワー確認項目

  • 動作確認
  • コードレビュー
  • E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
  • 互換性が保持されているか
  • セキュリティ上の問題がないか
    • 権限を超えた操作が可能にならないか
    • 不要なファイルアップロードがないか
    • 外部へ公開されるファイルや機能の追加ではないか
    • テンプレートでのエスケープ漏れがないか

@codecov-commenter
Copy link

codecov-commenter commented Apr 6, 2022

Codecov Report

Merging #5345 (e569b06) into 4.1 (91a9761) will decrease coverage by 0.01%.
The diff coverage is 0.00%.

@@             Coverage Diff              @@
##                4.1    #5345      +/-   ##
============================================
- Coverage     68.60%   68.58%   -0.02%     
- Complexity     6159     6162       +3     
============================================
  Files           463      463              
  Lines         25285    25299      +14     
============================================
+ Hits          17346    17351       +5     
- Misses         7939     7948       +9     
Flag Coverage Δ
E2E 57.94% <0.00%> (-0.01%) ⬇️
Unit 76.13% <0.00%> (+0.02%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
src/Eccube/Controller/ShoppingController.php 55.45% <0.00%> (-0.65%) ⬇️
src/Eccube/Entity/TaxRule.php 85.18% <0.00%> (-1.24%) ⬇️
src/Eccube/Service/OrderPdfService.php 91.61% <0.00%> (-1.20%) ⬇️
...e/Controller/Admin/Product/CsvImportController.php 55.60% <0.00%> (-0.12%) ⬇️
...ontroller/Admin/Product/ProductClassController.php 80.76% <0.00%> (+0.48%) ⬆️
...be/Service/PurchaseFlow/Processor/TaxProcessor.php 73.77% <0.00%> (+3.27%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 91a9761...e569b06. Read the comment docs.

// FIXME @Templateの差し替え.
$request->attributes->set('_template', new Template(['template' => 'Shopping/index.twig']));
$template = new Template([
'owner' => [self::class, 'confirm'],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pineray
このownerパラメータってなんですか?
ドキュメント等あれば教えていただければと。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@chihiro-adachi
そのテンプレートがどのコントローラーのアクションから呼び出されているかを示すもののようです。
$request の attributes パラメーターに直接セットすることが一般的な使い方ではないようで、ざっと探してみてもドキュメントが見当たりません

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど。ありがとうございます。

Copy link
Contributor

@kiy0taka kiy0taka Apr 6, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

処理によってテンプレートを変えるなら @Template 使わずに、render メソッド使う方法に変えてしまっていいと思います。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kiy0taka
renderメソッドだとtemplate eventが発動しないため、無理やり@templateを使っているんだと思います

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど。。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pineray
ownerパラメータですが、利用箇所を追ってみると、\ReflectionObjectに渡されていました。
self::classではなく、$thisオブジェクトで渡してあげるのが良さそうです。
https://github.com/sensiolabs/SensioFrameworkExtraBundle/blob/7fd1d54c1b27f094a68ae15a99b7fc815857255f/src/EventListener/TemplateListener.php#L99
https://github.com/sensiolabs/SensioFrameworkExtraBundle/blob/7fd1d54c1b27f094a68ae15a99b7fc815857255f/src/EventListener/TemplateListener.php#L144

@chihiro-adachi chihiro-adachi added this to the 4.1.x milestone Apr 6, 2022
@chihiro-adachi
Copy link
Contributor

@pineray
注文手続きで3001文字以上入力し、確認するボタンをクリックで以下の状態になりました。
システムエラーは発生しなかったのですが再現手順は他に何か必要でしょうか?
image

@pineray
Copy link
Contributor Author

pineray commented Apr 14, 2022

@chihiro-adachi
WSL2 の Ubuntu 上でレポジトリの最新状態にしてから、docker compose でイメージを新しく作成してインストールした直後に、注文手続きで3001文字入力して確認ボタンを押すと、やはり fatal error となります。
何が違っているのだろう
Screenshot 2022-04-14 at 12-59-28 Notice Undefined offset 0 (500 Internal Server Error)

@nanasess
Copy link
Contributor

APP_ENV=dev だからじゃないですかね

@pineray
Copy link
Contributor Author

pineray commented Apr 18, 2022

docker-compose.yml の APP_ENV を prod に変更して同じ操作を行うと、「システムエラーが発生しました」と表示されます
Screenshot 2022-04-18 at 15-29-47 システムエラーが発生しました。

@chihiro-adachi chihiro-adachi modified the milestones: 4.1.x, 4.1.3 Apr 21, 2022
@chihiro-adachi
Copy link
Contributor

@pineray
すみません、cloneし直してdocker-composeで起動したところ再現しました。

// FIXME @Templateの差し替え.
$request->attributes->set('_template', new Template(['template' => 'Shopping/index.twig']));
$template = new Template([
'owner' => [self::class, 'confirm'],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pineray
ownerパラメータですが、利用箇所を追ってみると、\ReflectionObjectに渡されていました。
self::classではなく、$thisオブジェクトで渡してあげるのが良さそうです。
https://github.com/sensiolabs/SensioFrameworkExtraBundle/blob/7fd1d54c1b27f094a68ae15a99b7fc815857255f/src/EventListener/TemplateListener.php#L99
https://github.com/sensiolabs/SensioFrameworkExtraBundle/blob/7fd1d54c1b27f094a68ae15a99b7fc815857255f/src/EventListener/TemplateListener.php#L144

@chihiro-adachi chihiro-adachi merged commit 9571d0d into EC-CUBE:4.1 May 18, 2022
@chihiro-adachi
Copy link
Contributor

@pineray
ありがとうございます。マージしました。

@Yangsin Yangsin modified the milestones: 4.1.3, 4.2.0 Apr 17, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants