バージョン選択
フォーラム
メニュー
オンライン状況
|
|
29 人のユーザが現在オンラインです。 (17 人のユーザが フォーラム を参照しています。) |
|
|
質問 > フロント機能 > $form->isSubmitted() が false になる |
|
フロント機能
投稿者 |
スレッド |
h_tanaka |
投稿日時: 2019/9/4 11:46
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 愛媛県 投稿: 1665 |
$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 居住地: 愛媛県 投稿: 1665 |
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の機能やデザインのカスタマイズ承ります。
|
|
|
|
統計情報
総メンバー数は89,777名です
総投稿数は110,199件です
|