バージョン選択

フォーラム

メニュー

オンライン状況

89 人のユーザが現在オンラインです。 (76 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 89
もっと...

サイト内検索

質問 > フロント機能 > handleRequestの前後でデータが消えてしまう問題の解決策

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
zushi0905
投稿日時: 2020/8/26 20:05
対応状況: 確認中
新米
登録日: 2020/8/26
居住地:
投稿: 3
handleRequestの前後でデータが消えてしまう問題の解決策
[EC-CUBE] 4.3
[レンタルサーバ] xserver
[PHP] 7.3
[データベース] mysql5.6

DBにカラムを追加し、Front側にFormを追加しましたが、handleRequestの前後でデータが消えてしまう問題の解決策を探しています。
バリデーションが拡張用traitのアノテーションで追加されると思っています。OrderTypeに$builder->addでバリデーションの内容を追加する必要があったりするのでしょうか?

# Entityの追加
trait OrderTrait //ファイル名と合わせる
{
/**
* @ORM\Column(name="shop_name", type="string", nullable=true)
* @Eccube\FormAppend(
* auto_render=true,
* type="\Symfony\Component\Form\Extension\Core\Type\TextType",
* options={
* "required": false,
* "label": "店舗名"
* })
*/
public $shop_name;

# Front Formに追加
app/template/default/Shoppiing/index.twig に以下を追加
```
{{ form_widget(form.shop_name, { type: "text", 'attr': { 'class': 'form-control' }}) }}
```

# Constoller内での処理
src/Eccube/Controller/ShoppingController.php : checkout
```
// ここでは $Orderにshop_nameの入力データが保持されている
// dump($Order);
$form->handleRequest($request);
// ここで $Orderのshop_nameの入力データがnullになってしまう。
// dump($Order);
```
468
投稿日時: 2020/8/27 13:31
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: handleRequestの前後でデータが消えてしまう問題の解決策
リクエストのPOSTデータにはフォームで入力されたshop_nameは含まれていますか?
中身がnullでサーバへ送信されているという可能性はないでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

zushi0905
投稿日時: 2020/8/27 16:04
対応状況: −−−
新米
登録日: 2020/8/26
居住地:
投稿: 3
Re: handleRequestの前後でデータが消えてしまう問題の解決策
ご返信ありがとうございます。

checkout()のhandleRequestを実行している前後で以下のような出力を行いました。


        $form = $this->createForm(OrderType::class, $Order, [
            // 確認画面から注文処理へ遷移する場合は, Orderエンティティで値を引き回すためフォーム項目の定義をスキップする.
            'skip_add_form' => true,
        ]);

        dump($form);
        dump($request);
        $form->handleRequest($request);
        dump($form);
        exit;



一部省いておりますが、以下のようになりました。

Form {#1993 ▼
  -config: FormBuilder {#1994 ▶}
  -parent: null
  -children: OrderedHashMap {#1995 ▶}
  -errors: []
  -submitted: false
  -clickedButton: null
  -modelData: Order {#1659 ▼
    -id: 102
    -pre_order_id: "fe2074be1dfc5904ca6f7d698ac40014b864a898"
   +shop_name: "テストshop"
}

Request {#2 ▼
  +attributes: ParameterBag {#6 ▼
    #parameters: array:5 [▶]
  }
  +request: ParameterBag {#5 ▼
    #parameters: array:1 [▼
      "_shopping_order" => array:1 [▶]
    ]
  }
  +query: ParameterBag {#4 ▼
    #parameters: []
  }
}

Form {#1993 ▼
  -config: FormBuilder {#1994 ▶}
  -parent: null
  -children: OrderedHashMap {#1995 ▶}
  -errors: []
  -submitted: true
  -clickedButton: null
  -modelData: Order {#1659 ▼
    -id: 102
    -pre_order_id: "fe2074be1dfc5904ca6f7d698ac40014b864a898"
    -order_no: "102"
    +shop_name: null
}


postデータにはshop_nameは入っていないようです。
handleRequestの前後でshop_nameのデータがnullに変わっている事は観測出来ております。
余談ですが、管理画面で受注情報編集では問題なくデータの入力が出来ます。
他のデータ同様、requestには何も入っていないため、そのままのデータを保持して欲しいのですが、分かっておりません。
468
投稿日時: 2020/8/30 11:01
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: handleRequestの前後でデータが消えてしまう問題の解決策
handleRequest()の直前に以下の指定をしている事に理由があるのではないでしょうか?

// 確認画面から注文処理へ遷移する場合は, Orderエンティティで値を引き回すためフォーム項目の定義をスキップする.
'skip_add_form' => true,

handleRequest()の中までソースを読んでいないので、あくまで予想ですが
requestの内容でshop_nameが置換されているのではないでしょうか?
(POSTデータに含まれない = null)

OrderTypeのfunction buildFormを確認すると
skip_add_form = trueの時はフォーム項目をまったくaddしていないようにしているようですが
これはOrderの内容がnullにならないような回避策として実装されているのでは?と思いました。
traitで拡張したカラムは常にフォーム項目として追加されているようですので。

あまり良いやり方とは思いませんが
handleRequest()の前にshop_nameを変数に代入して
handleRequest()の後にformのshop_nameに値を戻す等の例外的な処理が必要なのではないでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

zushi0905
投稿日時: 2020/8/31 12:40
対応状況: 解決済
新米
登録日: 2020/8/26
居住地:
投稿: 3
Re: handleRequestの前後でデータが消えてしまう問題の解決策
'skip_add_form' => true
こちらの項目は私も気になり、一度falseにしましたが変わりありませんでした。
symfonyの機能に関しては。不勉強なものであまり理解しきれていませんので、また時間がある時に確認して見ます。

今回提示いただいた方法は今現在行なっている実装そのものになります。ECCUBEに乗っかった実装を行いたいと考えた為こちらで質問させていただきました。

とりあえずにはなりますが、提示いただいた実装で進めたいと思います。ご助言ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,295名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.