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>