【EC-CUBE4】お問い合わせ内容をデータベースに保存する方法
EC-CUBE4でお問い合わせ内容をデータベースに保存する方法です。
※下記ソースコードはPHP7.1以上を対象としています。
Contactエンティティを用意
まずお問い合わせ内容を保存するため、Cusotomize/Enitiyディレクトリ内にContact.phpというファイル名で下記のソースコードを設置してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | <?php namespace Customize\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="Customize\Repository\ContactRepository") */ class Contact extends \Eccube\Entity\AbstractEntity { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $name01; /** * @ORM\Column(type="string", length=255) */ private $name02; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $kana01; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $kana02; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $postal_code; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $pref; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $addr01; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $addr02; /** * @ORM\Column(type="string", length=255, nullable=true) */ private $phone_number; /** * @ORM\Column(type="string", length=255) */ private $email; /** * @ORM\Column(type="text") */ private $contents; public function getId(): ?int { return $this->id; } public function getName01(): ?string { return $this->name01; } public function setName01(string $name01): self { $this->name01 = $name01; return $this; } public function getName02(): ?string { return $this->name02; } public function setName02(string $name02): self { $this->name02 = $name02; return $this; } public function getKana01(): ?string { return $this->kana01; } public function setKana01(?string $kana01): self { $this->kana01 = $kana01; return $this; } public function getKana02(): ?string { return $this->kana02; } public function setKana02(?string $kana02): self { $this->kana02 = $kana02; return $this; } public function getPostalCode(): ?string { return $this->postal_code; } public function setPostalCode(?string $postal_code): self { $this->postal_code = $postal_code; return $this; } public function getPref(): ?string { return $this->pref; } public function setPref(?string $pref): self { $this->pref = $pref; return $this; } public function getAddr01(): ?string { return $this->addr01; } public function setAddr01(?string $addr01): self { $this->addr01 = $addr01; return $this; } public function getAddr02(): ?string { return $this->addr02; } public function setAddr02(?string $addr02): self { $this->addr02 = $addr02; return $this; } public function getPhoneNumber(): ?string { return $this->phone_number; } public function setPhoneNumber(?string $phone_number): self { $this->phone_number = $phone_number; return $this; } public function getEmail(): ?string { return $this->email; } public function setEmail(string $email): self { $this->email = $email; return $this; } public function getContents(): ?string { return $this->contents; } public function setContents(string $contents): self { $this->contents = $contents; return $this; } } |
データベースにお問い合わせ内容を保存するテーブルを作成
下記のコマンドを実行すると、上記で作成したエンティティを元にお問い合わせ内容を保存するテーブルが自動で生成されます。
1 | bin/console eccube:schema:update --force |
お問い合わせ完了時にお問い合わせ内容を保存するイベント処理を用意
お問い合わせ送信後にお問い合わせ内容を保存する処理を追加するため、CusotomizeディレクトリにEvent.phpというファイル名で下記のソースコードを設置してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <?php namespace Customize; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Eccube\Event\EccubeEvents; use Eccube\Event\EventArgs; use Customize\Entity\Contact; use Doctrine\ORM\EntityManagerInterface; class Event implements EventSubscriberInterface { /** * @var EntityManagerInterface */ private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @return array */ public static function getSubscribedEvents() { return [ EccubeEvents::FRONT_CONTACT_INDEX_COMPLETE => 'onFrontContactIndexComplete' ]; } public function onFrontContactIndexComplete(EventArgs $event) { $data = $event->getArgument("data"); $Contact = new Contact(); $Contact->setName01($data["name01"]); $Contact->setName02($data["name02"]); $Contact->setKana01($data["kana01"]); $Contact->setKana02($data["kana02"]); $Contact->setPostalCode($data["postal_code"]); $Contact->setPref($data["pref"]); $Contact->setAddr01($data["addr01"]); $Contact->setAddr02($data["addr02"]); $Contact->setPhoneNumber($data["phone_number"]); $Contact->setEmail($data["email"]); $Contact->setContents($data["contents"]); $this->entityManager->persist($Contact); $this->entityManager->flush(); } } |
以上で完成です。
コメントを投稿するにはログインが必要です。