バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 管理画面の会員登録に項目を追加すると「Compound forms expect an array or NULL on submission.」と表示される

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
_dauto_
投稿日時: 2021/3/27 20:04
対応状況: 開発中
新米
登録日: 2020/3/26
居住地:
投稿: 4
管理画面の会員登録に項目を追加すると「Compound forms expect an array or NULL on submission.」と表示される
▼テンプレート
[EC-CUBE] EC-CUBE 4.0.5
[現象]
管理画面の会員登録フォームにグループという項目を追加した所、以下のエラーが発生しました。
グループは新規に追加したdtb_groupというテーブルとリレーションしています。
このエラーを解決するためには何処を改善すればいいのでしょうか。

関連するソースコード

GroupExtension.php(会員登録の拡張フォーム)
<?php

namespace Plugin\CustomerGroup\Form\Extension;

use Doctrine\ORM\EntityRepository;
use Eccube\Form\Type\Admin\CustomerType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Doctrine\ORM\EntityManagerInterface;
use Plugin\CustomerGroup\Repository\GroupRepository;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

class GroupExtension extends AbstractTypeExtension
{
    /**
     * @var EntityManagerInterface
     */
    protected $entityManager;

    /**
     * @var GroupRepository
     */
    protected $groupRepository;

    /**
     * constructor.
     *
     * @param $entityManager
     */
    public function __construct(EntityManagerInterface $entityManager, GroupRepository $groupRepository)
    {
        $this->entityManager = $entityManager;
        $this->groupRepository = $groupRepository;
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $qb = $this->entityManager->createQueryBuilder();
        $groups = $this->groupRepository->getList();

        $options['choices'] = $groups;
        $options['required'] = false;
        $options['expanded'] = false;
        $options['multiple'] = false;
        $options['choice_label'] = function($groups){
            return $groups->getName();
        };
        $options['choice_value'] = function($groups){
            return $groups->getId();
        };
        $options['placeholder'] = 'common.select';

        $builder->add('group', ChoiceType::class, $options);

        $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
            $form = $event->getForm();
            $Customer = $event->getData();
            if ($Customer->getGroup()) {
                $event->setData();
            }
        });
    }

    /**
     * {@inheritdoc}
     */
    public function getExtendedType()
    {
        return CustomerType::class;
    }
}


Group.php(新規追加したdtb_groupテーブルのエンティティ)
<?php

namespace Plugin\CustomerGroup\Entity;

use DateTime;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Entity\AbstractEntity;
use Eccube\Entity\Customer;

/**
 *
 * Group
 *
 * @ORM\Table(name="dtb_group")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
 * @ORM\HasLifecycleCallbacks()
 * @ORM\Entity(repositoryClass="Plugin\CustomerGroup\Repository\GroupRepository")
 */
class Group extends AbstractEntity
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", options={"unsigned":true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="create_date", type="datetimetz")
     */
    private $create_date;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="update_date", type="datetimetz")
     */
    private $update_date;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\OneToMany(targetEntity="Eccube\Entity\Customer", mappedBy="Group")
     */
    private $Customer;

    /**
     * Set id
     *
     * @param integer $id
     *
     * @return Group
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Group
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set createDate
     *
     * @param DateTime $createDate
     *
     * @return Group
     */
    public function setCreateDate($createDate)
    {
        $this->create_date = $createDate;

        return $this;
    }

    /**
     * Get createDate
     *
     * @return DateTime
     */
    public function getCreateDate()
    {
        return $this->create_date;
    }

    /**
     * Set updateDate
     *
     * @param DateTime $updateDate
     *
     * @return Group
     */
    public function setUpdateDate($updateDate)
    {
        $this->update_date = $updateDate;

        return $this;
    }

    /**
     * Get updateDate
     *
     * @return DateTime
     */
    public function getUpdateDate()
    {
        return $this->update_date;
    }

    /**
     * Set customer
     *
     * @param Customer|null $customer
     *
     * @return Group
     */
    public function setCustomer(Customer $customer = null)
    {
        $this->Customer = $customer;

        return $this;
    }

    /**
     * Get customer
     *
     * @return Customer|null
     */
    public function getCustomer()
    {
        return $this->Customer;
    }
}


CustomerTrait.php(dtb_customerテーブルの拡張エンティティ)
<?php

namespace Plugin\CustomerGroup\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Eccube\EntityExtension("Eccube\Entity\Customer")
 */
trait CustomerTrait {

    /**
     * @var Group
     *
     * @ORM\ManyToOne(targetEntity="Plugin\CustomerGroup\Entity\Group", inversedBy="Customer")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="group_id", referencedColumnName="id")
     * })
     */
    private $Group;

    /**
     * Set group
     *
     * @param Group|null $group
     *
     * @return CustomerTrait
     */
    public function setGroup(Group $group = null)
    {
        $this->Group = $group;

        return $this;
    }

    /**
     * Get group
     *
     * @return Group|null
     */
    public function getGroup()
    {
        return $this->Group;
    }
}
_dauto_
投稿日時: 2021/3/28 19:25
対応状況: −−−
新米
登録日: 2020/3/26
居住地:
投稿: 4
Re: 管理画面の会員登録に項目を追加すると「Compound forms expect an array or NULL on submission.」と表示される
フォームのGroupのオプションでcompoundをfalseにすると上手く保存できました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は71,659名です
総投稿数は101,392件です

投稿数ランキング

1
seasoft
7333
2
468
2999
3
AMUAMU
2712
4
nanasess
2147
5
umebius
2006
6
yuh
1612
7
red
1450
8
h_tanaka
1080
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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