質問 > フロント機能 > 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でサーバへ送信されているという可能性はないでしょうか?
|
zushi0905 |
投稿日時: 2020/8/27 16:04
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2020/8/26 居住地: 投稿: 3 |
Re: handleRequestの前後でデータが消えてしまう問題の解決策 ご返信ありがとうございます。
checkout()のhandleRequestを実行している前後で以下のような出力を行いました。
一部省いておりますが、以下のようになりました。
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に値を戻す等の例外的な処理が必要なのではないでしょうか?
|
zushi0905 |
投稿日時: 2020/8/31 12:40
対応状況: 解決済
|
新米 ![]() ![]() 登録日: 2020/8/26 居住地: 投稿: 3 |
Re: handleRequestの前後でデータが消えてしまう問題の解決策 'skip_add_form' => true
こちらの項目は私も気になり、一度falseにしましたが変わりありませんでした。 symfonyの機能に関しては。不勉強なものであまり理解しきれていませんので、また時間がある時に確認して見ます。 今回提示いただいた方法は今現在行なっている実装そのものになります。ECCUBEに乗っかった実装を行いたいと考えた為こちらで質問させていただきました。 とりあえずにはなりますが、提示いただいた実装で進めたいと思います。ご助言ありがとうございます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |