質問 > フロント機能 > DBへのデータの渡し方について |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
saitom |
投稿日時: 2025/1/15 18:43
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/11/1 居住地: 投稿: 38 |
DBへのデータの渡し方について ▼テンプレート
[EC-CUBE] 4.2 [現象] confirm.twigで {% if Order.hide_sender or Order.use_delivery_box or Order.request_call or Order.campaign_info %} と {% if Order.hide_sender %}こういったソースだけで DBにデータが登録されるのはなぜですか?(inputなどが要らない) controller内にあるpublic function confirm(Request $request) でどのように定義されているのでしょうか confirmまではデータが渡っているのに、DBに登録できない状態です。 |
mcontact |
投稿日時: 2025/1/15 20:01
対応状況: −−−
|
神 ![]() ![]() 登録日: 2022/1/22 居住地: 投稿: 1593 |
Re: DBへのデータの渡し方について
twigファイルでは、DBデータへは参照しかありませんのでデータの登録処理はありません。 controller部内からのDBへの登録処理が参照されています。
|
h_tanaka |
投稿日時: 2025/1/16 9:04
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1911 |
Re: DBへのデータの渡し方について Symfony の基本的な仕組みを勉強されてください。
注文すべきは twig ではなく Controller です。 ShoppingController でいえば、 $Order を作成して $this->entityManager->flush(); で保存しています。 ご提示されている条件文はEC-CUBE標準にはなく独自カスタマイズされたソースに見受けられるので、特別な処理が施されている可能性はありますが。。
|
saitom |
投稿日時: 2025/1/16 13:14
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/11/1 居住地: 投稿: 38 |
Re: DBへのデータの渡し方について 返信ありがとうございます。
チェックボックスのみ保存されない状態です。 controllreのfunction confirm内の $form = $this->createForm(OrderType::class, $Order); $form->handleRequest($request); // dd($form); ここではデータが正しく取得(true)になっていますが function checkout内で $form = $this->createForm(OrderType::class, $Order, [ // 確認画面から注文処理へ遷移する場合は, Orderエンティティで値を引き回すためフォーム項目の定義をスキップする. 'skip_add_form' => true, ]); $form->handleRequest($request); dd($form); このように記載し確認すると、falseになってしまい、DBに登録されてしまいます。 同じように追加したテキストエリアは正常に登録されます。 また、src上ではチェックボックスも正常に登録されます。 (customizeにコピーし、namespace等修正したcontrollerで登録がうまくできません) 原因をどのように特定すればよいでしょうか? |
h_tanaka |
投稿日時: 2025/1/16 14:28
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1911 |
Re: DBへのデータの渡し方について チェックボックスを定義している FormType のソースコードを開示してもらえますでしょうか。
|
saitom |
投稿日時: 2025/1/16 14:47
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/11/1 居住地: 投稿: 38 |
Re: DBへのデータの渡し方について こちらでよろしいでしょうか?
public function buildForm(FormBuilderInterface $builder, array $options) { // ShoppingController::checkoutから呼ばれる場合は, フォーム項目の定義をスキップする. if ($options['skip_add_form']) { return; } $builder->add('hide_sender', CheckboxType::class, [ 'label' => '発送者・商品名を伏せる', 'required' => false, ]) ->add('use_delivery_box', CheckboxType::class, [ 'label' => '不在時宅配ボックスの利用可否', 'required' => false, ]) ->add('request_call', CheckboxType::class, [ 'label' => '配送前の確認TELを依頼するか', 'required' => false, ]) ->add('campaign_info', CheckboxType::class, [ 'label' => 'キャンペーン情報を希望するか', 'required' => false, ]); |
h_tanaka |
投稿日時: 2025/1/16 14:52
対応状況: −−−
|
神 ![]() ![]() 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1911 |
Re: DBへのデータの渡し方について なんでしょうね。。
見た感じでは問題が見当たりません。 デバッグする必要があるかと思います。 checkout のタイミングでは form からの保存は行っていないので、 dd($form); ではなく、 dd($Order); で確認する必要があります。
|
saitom |
投稿日時: 2025/1/16 19:01
対応状況: −−−
|
常連 ![]() ![]() 登録日: 2024/11/1 居住地: 投稿: 38 |
Re: DBへのデータの渡し方について ありがとうございます。
デバックしたところ、 $orderの値が置換されていたので 最後の$this->entityManager->flush();の直前で値を再設定するように書き換えればデータが正しい値で登録されました。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |