▼テンプレート
[EC-CUBE] EC-CUBE 4.2.1
[レンタルサーバ] エックスサーバー
[OS] Windows
[PHP] 8.1.29
[データベース] phpmyadmin(MySQL5.7)
[導入プラグインの有無]
おすすめ商品管理プラグイン 4.3.0
関連商品プラグイン 4.3.0
データ移行プラグイン 4.3.0
PGマルチペイメントサービス決済プラグイン 1.0.6
EC-CUBEペイメント決済プラグイン(4.2系)
[カスタマイズの有無] 無し
[現象]
会員登録情報に、性別のような必須ではないが登録できる項目を増やしたいと考えています。
新規会員登録画面には表示されず、マイページの会員情報変更ページで表示されればよいのですが、このようなことをしてもページにフォームが表示されません。
なにか足りない部分やおかしいところはありますでしょうか。よろしければご教授いただけますと幸いです。
◯データベースにテーブルを追加
dtb_customer テーブルに batting_style と average_score の2カラムを追加しています(どちらも VARCHAR, null許可)。
◯ファイル追加
app/Customize/Entity/CustomerTrait.php
namespace Customize\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;
use Symfony\Component\Validator\Constraints as Assert;
trait CustomerTrait
{
/**
* @var string|null
* @ORM\Column(name="batting_style", type="string", length=255, nullable=true)
* @EntityExtension\FormAppend(
* auto_render=false,
* type="\Symfony\Component\Form\Extension\Core\Type\ChoiceType",
* options={
* "label": "右/左",
* "choices": {
* "右": "right",
* "左": "left"
* },
* "required": false,
* "expanded": true,
* "multiple": false,
* "mapped": true
* }
* )
*/
private $battingStyle;
/**
* @var string|null
* @ORM\Column(name="average_score", type="string", length=255, nullable=true)
* @EntityExtension\FormAppend(
* auto_render=false,
* type="\Symfony\Component\Form\Extension\Core\Type\ChoiceType",
* options={
* "label": "平均スコア",
* "choices": {
* "A": "A",
* "B": "B",
* "C": "C",
* "D": "D",
* "E": "E"
* },
* "required": false,
* "expanded": true,
* "multiple": false,
* "mapped": true
* }
* )
*/
private $averageScore;
public function getBattingStyle()
{
return $this->battingStyle;
}
public function setBattingStyle($battingStyle)
{
$this->battingStyle = $battingStyle;
return $this;
}
public function getAverageScore()
{
return $this->averageScore;
}
public function setAverageScore($averageScore)
{
$this->averageScore = $averageScore;
return $this;
}
}
◯ファイル追加
app/Customize/Form/Extension/MypageChangeTypeExtension.php
namespace Customize\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Eccube\Form\Type\Front\MypageChangeType;
class MypageChangeTypeExtension extends AbstractTypeExtension
{
public static function getExtendedTypes(): iterable
{
return [MypageChangeType::class];
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('battingStyle', ChoiceType::class, [
'label' => '右/左',
'choices' => [
'右' => 'right',
'左' => 'left',
],
'expanded' => true,
'multiple' => false,
'required' => false,
])
->add('averageScore', ChoiceType::class, [
'label' => '平均スコア',
'choices' => [
'A' => 'A',
'B' => 'B',
'C' => 'C',
'D' => 'D',
'E' => 'E',
],
'required' => false,
]);
}
}
◯src/Eccube/Entity/Customer.php 修正
if (!class_exists(...)) {} ブロックの削除
修正内容
namespace Eccube\Entity;
// 既存のコード...
use Customize\Entity\CustomerTrait; // 追加
/**
// 既存のコード...
*/
class Customer extends \Eccube\Entity\AbstractEntity implements UserInterface, \Serializable
{
use CustomerTrait; // 追加
// 既存のコード...
}
◯app/config/eccube/services.yaml
追加内容
services:
Customize\Form\Extension\MypageChangeTypeExtension:
tags:
- { name: form.type_extension, extended_type: Eccube\Form\Type\Front\MypageChangeType }
◯MYページ/会員登録内容変更(入力ページ)に追加
app/template/default/Mypage/change.twig
{{ form_label(form.battingStyle) }}
{{ form_widget(form.battingStyle) }}
{{ form_errors(form.battingStyle) }}