質問 > フロント機能 > OrderTypeに項目を追加すると購入エラーと表示されます。 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
hashida |
投稿日時: 2021/6/28 16:10
対応状況: −−−
|
半人前 登録日: 2021/6/25 居住地: 投稿: 28 |
OrderTypeに項目を追加すると購入エラーと表示されます。 ▼テンプレート
[EC-CUBE] EC-CUBEのバージョン4.0.5、新規インストール [OS] Docker Windows [PHP] 7.4 [データベース] SQLite [ブラウザ] クロム [カスタマイズの有無] 注文項目に受け取り時間を追加しようとOrderTypeを拡張しました。データベースの値がNULLになってしまうので、https://ruco.la/memo/404を参考にしました。 以下が追加したコードでございます。 [OrderTrait.php] <?php namespace Plugin\takeout\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation\EntityExtension; /** * @EntityExtension("Eccube\Entity\Order") */ trait OrderTrait { /** * @ORM\Column(name="takeout_time",type="datetimetz", nullable=true) */ private $takeout_time; public function getTakeouttime():?\DateTimeInterface { return $this->takeout_time; } public function setTakeouttime(?\DateTimeInterface $takeout_time): self { $this->takeout_time = $takeout_time; return $this; } } [takeoutOrderExtension.php] <?php /* * This file is part of EC-CUBE * * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. * * http://www.ec-cube.co.jp/ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Plugin\takeout\Form\Extension; use Eccube\Common\EccubeConfig; use Eccube\Entity\Order; use Eccube\Form\Type\Shopping\OrderType; use Symfony\Component\Form\Extension\Core\Type\DateTimeType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Validator\Constraints as Assert; class takeoutOrderExtension extends AbstractTypeExtension { private $eccubeConfig; public function __construct(EccubeConfig $eccubeConfig) { $this->eccubeConfig = $eccubeConfig; } /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('takeout_time', DateTimeType::class, [ 'label' => '受け取り希望時間', 'required' => false, 'years' => range(date('Y'), date('Y') + 10), 'placeholder' => [ 'year' => '----', 'month' => '--', 'day' => '--', 'hour' => '--', 'minute' => '--' ], 'eccube_form_options' => [ 'auto_render' => true ] ]) ->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']) ; } public function onPreSubmit(FormEvent $event) { // ShoppingControllerのcheckoutでhandleRequestの後にtakeout_timeが消える問題の対応 $data = $event->getData(); $takeout_time = $event->getForm()->get('takeout_time')->getData(); if( !isset($data['takeout_time']) ){ $data['takeout_time'] = $takeout_time ; } $event->setData($data); } /** * {@inheritdoc} * */ public function getExtendedType() { return OrderType::class; } } [現象] 受け取り時間を入力して、確認するをクリックし、時間が入力された子を確認はできるのですが、注文をするをクリックすると「購入エラー」と表示されるだけで、デバッグモードにしても何がエラーを起こしているのか確認できません。 初歩的な質問で申し訳ありません。どなたかご教授いただけますと幸いでです。 |
hashida |
投稿日時: 2021/6/29 9:33
対応状況: −−−
|
半人前 登録日: 2021/6/25 居住地: 投稿: 28 |
Re: OrderTypeに項目を追加すると購入エラーと表示されます。 buildformに下記を追加することで解決できました。
// ShoppingController::checkoutから呼ばれる場合は, フォーム項目の定義をスキップする. if ($options['skip_add_form']) { return; } |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |