▼テンプレート
[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;
}
}