バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > $form->isSubmitted() が false になる

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2019/9/4 11:46
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 907
$form->isSubmitted() が false になる
EC-CUBE 4.0.2

新規作成したLPページに会員情報や注文情報を入力できるようにし、一気に注文内容確認ページに遷移できる機能を作成しています。
1. LP
2. LP注文内容確認
3. LP注文完了

1から2への遷移は問題なくできたのですが、2から3へ遷移するときに $form->isSubmitted() が false になってしまいます。
原因、または原因の調査方法わかりますでしょうか?

LpController.php
    /**
     * 注文確認画面を表示する.
     *
     * @Route("/lp/{url}/confirm", name="lp_confirm", methods={"POST"}, requirements={"url"})
     * @Template("default/lp_confirm.twig")
     *
     * @param Request $request
     * @param string $url
     */
    public function confirm(Request $request, string $url)
    {
        $Lp = $this->lpRepository->findOneBy(array('url' => $url));
        if (!$Lp) {
            $this->addError('front.shopping.system_error');
            return $this->redirectToRoute('lp_error', ['url' => $url]);
        }

        /** @var $Customer \Eccube\Entity\Customer */
        $Customer = $this->getUser() ? $this->getUser() : $this->customerRepository->newCustomer();

        // 販売種別に紐づく配送業者を取得.
        $SaleType = $Lp->getSaleType();
        $SaleTypes[$SaleType->getId()] = $SaleType;
        $Deliveries = $this->deliveryRepository->getDeliveries($SaleTypes);

        /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
        $builder = $this->formFactory->createNamedBuilder(
            '',
            LpType::class,
            null,
            [
                'Customer' => $Customer,
                'Deliveries' => $Deliveries,
                'Payment' => null,
                'allow_extra_fields' => true,
            ]
        );

        $form = $builder->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {    // ★ ここは問題ない
            ...注文情報登録処理...
        }

        log_info('[LP注文確認] フォームエラー.', [$url]);
        return $this->redirectToRoute('lp_detail', ['url' => $url]);
    }

    /**
     * 注文処理を行う.
     *
     * 決済プラグインによる決済処理および注文の確定処理を行います.
     *
     * @Route("/lp/{url}/checkout", name="lp_checkout", methods={"POST"}, requirements={"url"})
     * @Template("@tbsFeaturePage/default/lp_confirm.twig")
     *
     * @param Request $request
     * @param string $url
     */
    public function checkout(Request $request, string $url)
    {
        // 受注の存在チェック
        $preOrderId = $this->cartService->getPreOrderId();
        $Order = $this->orderHelper->getPurchaseProcessingOrder($preOrderId);
        if (!$Order) {
            log_info('[LP注文処理] 購入処理中の受注が存在しません.', [$preOrderId]);
            return $this->redirectToRoute('lp_error', ['url' => $url]);
        }

        $Lp = $this->lpRepository->findOneBy(array('url' => $url));
        if (!$Lp) {
            $this->addError('front.shopping.system_error');
            return $this->redirectToRoute('lp_error', ['url' => $url]);
        }

        // 販売種別に紐づく配送業者を取得.
        $SaleType = $Lp->getSaleType();
        $SaleTypes[$SaleType->getId()] = $SaleType;
        $Deliveries = $this->deliveryRepository->getDeliveries($SaleTypes);

        /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
        $builder = $this->formFactory->createNamedBuilder(
            '',
            LpType::class,
            null,
            [
                'Customer' => $Order->getCustomer(),
                'Deliveries' => $Deliveries,
                'Payment' => null,
                'allow_extra_fields' => true,
                // 確認画面から注文処理へ遷移する場合は, エンティティで値を引き回すためフォーム項目の定義をスキップする.
                'skip_add_form' => true,
            ]
        );

        $form = $builder->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {    // ★ ここで isSubmitted() が false になる
            ...注文完了処理...
        }
    }


lp_confirm.twig
    <form id="shopping-form" method="post" action="{{ url('feature_checkout', {url : Feature.url }) }}">
        {{ form_widget(form._token) }}
                        <button type="submit" class="ec-blockBtn--action">{{ '注文する'|trans }}</button>
    </form>
h_tanaka
投稿日時: 2019/9/4 14:36
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 907
Re: $form->isSubmitted() が false になる
自己解決しました。

vendor の isSubmitted() 内をデバッグしていったところ、
vendor/symfony/form/Extension/HttpFoundation/HttpFoundationRequestHandler.php
104行目の次の箇所で弾かれていました。
        if ('' === $name && \count(array_intersect_key($data, $form->all())) <= 0) {
            return;
        }


どうやらフォーム名が設定されていないようです。

標準の src/Eccube/Controller/ShoppingController.php を参考に、次のように変更したところ、フォーム名が設定され、サブミットされるようになりました。
LpController.php

■変更前
        /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
        $builder = $this->formFactory->createNamedBuilder(
            '',
            LpType::class,
            null,
            [
                'Customer' => $Order->getCustomer(),
                'Deliveries' => $Deliveries,
                'Payment' => null,
                'allow_extra_fields' => true,
                // 確認画面から注文処理へ遷移する場合は, エンティティで値を引き回すためフォーム項目の定義をスキップする.
                'skip_add_form' => true,
            ]
        );

        $form = $builder->getForm();


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


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

ec-cube.co

統計情報

総メンバー数は49,518名です
総投稿数は93,188件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1967
4
468
1818
5
yuh
1602
6
red
1343
7
umebius
1296
8
fukap
907
9
h_tanaka
907
10
tsuji
856
11
shutta
835
12 ramrun 789
13
tao_s
774
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

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

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