質問 > 管理機能 > 注文途中でEntityの追加項目の値が消える |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tomochika |
投稿日時: 2021/12/27 14:49
対応状況: −−−
|
新米 登録日: 2008/7/18 居住地: 投稿: 6 |
注文途中でEntityの追加項目の値が消える [EC-CUBE] 4.1.0 新規インストール
[レンタルサーバ] 自社サーバー [OS] CentOs 7 [PHP] 7.3.25/FPM [データベース] MySQL 5.6.45 [WEBサーバ] Apache [導入プラグインの有無] WebAPI DeliveryPlus4 [現象] 受注項目を追加、各所のwebを参考に app/Customize/Entity/OrderTrait.phpを追加 ========= <?php namespace Customize\Entity; use Doctrine\ORM\Mapping as ORM; use Eccube\Annotation\EntityExtension; /** * @EntityExtension("Eccube\Entity\Order") */ trait OrderTrait { /** * @var string|null * @ORM\Column(type="string", length=14, nullable=true) * @Eccube\Annotation\FormAppend( * auto_render=false, * type="\Symfony\Component\Form\Extension\Core\Type\TextType", * options={ * "required": false, * "label": "携帯電話番号《日中ご連絡先》", * "attr": {"placeholder": "例:09000000000"} * }) */ private $mobile_number; /** * @return string|null */ public function getMobileNumber() { return $this->mobile_number; } /** * @param string|null $mobile_number * @return OrderTrait */ public function setMobileNumber($mobile_number) { $this->mobile_number = $mobile_number; return $this; } } ================================ キャッシュ削除、プロキシ再生成、dtb_order dtb_shippingにmobile_numberのフィールド追加 デバックモードにて Eccube\Entity\Order に mobile_numberの項目と値が追加されていることを確認。 カートに商品を入れ、レジに進む「ご注文手続き画面」表示、ここまではmobile_numberの項目/数値が引き回されていることを確認。 但し、以下の動作をすると以降電話番号の数値が引き回されなくなりますEntityには項目名のみが残っています。 ■確認するボタンを押し「ご注文内容のご確認」画面に進む ■「ご注文手続き画面」にて支払い方法や配送方法を変更する 上記の動作をすると追加したEntityの値が消えてしまいます。 以降の注文手続き画面でも値がないので、当然注文を完了しても dtb_orderのmobile_numberフィールドには値は入っておりません。 先にapp/Customize/Entity/CustomerTrait.phpでdtb_customerにmobile_number項目を追加したカスタマイズはうまくいっております。 ただ、その情報をdtb_orderのmobile_numberフィールドに入れたいだけなのですが、行き詰っております。 ご助言等あれば何卒よろしくお願い申し上げます。 |
umebius |
投稿日時: 2021/12/27 17:22
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 注文途中でEntityの追加項目の値が消える FormAppendが原因ではないかと思います。
管理画面でフォームを使うためにFormAppendを使用されていると思いますが、 FormAppendによって注文手続き画面のフォームsrc/Eccube/Form/Type/Shopping/OrderType.phpにも 項目が自動登録されるはずなので、「画面フォームを表示していない=データが送信されない」項目はNULLとなってしまいます。 FormExtensionで管理画面のフォームにのみ項目追加すればうまくいくのではないかと思います。 https://doc4.ec-cube.net/customize_formtype
|
tomochika |
投稿日時: 2021/12/28 12:24
対応状況: −−−
|
新米 登録日: 2008/7/18 居住地: 投稿: 6 |
Re: 注文途中でEntityの追加項目の値が消える ご返信ありがとうございます。
ご指摘の通り、FormAppend「画面フォームを表示していない=データが送信されない」でしたので、 FormAppendを利用しないようにOrderTrait.phpを修正しますと、 無事カート内で引きまわせるようになり、注文完了。dtb_orderテーブルの指定カラムに登録されました。 dtb_shippingには登録されませんでしたが。 非会員の購入の場合はdtb_shippingが配送関係のすべてになるようですのでdtb_shippingのカラムにも登録されるようチャレンジしてみます。 FormAppendを利用しないと、管理画面では利用できない状態、 .twig内で{{ form_widget(form.mobile_number) }}がエラーになりますので、こちらはFormExtensionにて拡張してみます。 umebius様のサイトを参考にさせていただき、チャレンジしておりましたが、まさかのご本人様からのアドバイス、ありがとうございます! |
tomochika |
投稿日時: 2021/12/28 16:56
対応状況: −−−
|
新米 登録日: 2008/7/18 居住地: 投稿: 6 |
Re: 注文途中でEntityの追加項目の値が消える FormAppendを使わずに管理画面側にも実装できました
symfonyのバージョンのせいか、getExtendedType()が実装されてないされてないとエラーを頂き頭にきておりましたが。 getExtendedTypes() なんですね。 MobileNumberExtension.php ---------------------------- <?php namespace Customize\Form\Extension; use Eccube\Form\Type\Admin\OrderType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormError; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\Validator\Constraints as Assert; class MobileNumberExtension extends AbstractTypeExtension { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('mobile_number', TextType::class, [ 'label' => 'けいたいばんごう', 'required' => false, 'attr' => [ 'maxlength' => 14, 'placeholder' => 'testnow', ], 'eccube_form_options' => [ 'auto_render' => false, ], 'constraints' => [ new Assert\Length(['max' => 14]), ], ]); } /** * {@inheritdoc} */ public function getExtendedTypes() { return [OrderType::class]; } } |
umebius |
投稿日時: 2021/12/28 19:43
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 注文途中でEntityの追加項目の値が消える そうですね、Symfonyのバージョンが変わったので
4.0ではgetExtendedType()でしたが、 4.1ではgetExtendedTypes()になっています。 また何かあればご投稿ください。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |