バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 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
居住地:
投稿: 2643
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
居住地:
投稿: 2643
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ペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は66,434名です
総投稿数は98,294件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2643
4
nanasess
2103
5
umebius
1742
6
yuh
1612
7
red
1424
8
h_tanaka
1041
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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