プラグイン > 開発について > メールからのフォームデータをDBテーブルに自動保存させたい。 |
開発について
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Bongsu |
投稿日時: 2018/2/15 13:16
対応状況: 開発中
|
半人前 登録日: 2018/2/15 居住地: 投稿: 29 |
メールからのフォームデータをDBテーブルに自動保存させたい。 ▼テンプレート
[EC-CUBE] EC-CUBE3.0.15 [レンタルサーバ] へテムルサーバー [OS] macOS Sierra 10.13.3 [PHP] PHP7.10 [データベース] Mysql5.6.23 [WEBサーバ] へテムルWEBサーバ [ブラウザ] safari [導入プラグインの有無] 独自プラグイン Test1 [カスタマイズの有無] [現象] 私はECCUBEを利用してサイトを作りたいと考えています。 何冊かの参考書は読みましたが、正直にそんなに知識がある訳ではありません。 でも どうしても完成させたいサイトなので どうか宜しくお願い致します。 やりたい事........ Pluginを使用(Pluginでなくてもいい)して 新たなメールフォームを作り お客様からの要望、情報などを取りたいと思っております。 新たなメールフォームはお客様の声を受信、確認のメールの送信と共に情報をデータベースに保存させたいと思っています。 メールフォームと 送受信が出来る所までは出来たのですが、どの様にあがいても データベースへの保存ができません。 内容は以下の通りです。 プラグイン名: Test1 Entity: Test1 DB 保存先テーブル名 : plg_retest1 コントローラー名: Test1Contoroller.php コントローラTest1Contoroller.phpはECCUBEのContact.phpを参考にしました。 コントローラー名: Test1Contoroller.phpコードは下記の通りです。 <?php namespace Plugin\Test1\Controller; use Eccube\Application; use Symfony\Component\HttpFoundation\Request; use Plugin\Test1\Entity\ReTest1; class Test1Controller { /** * Test1画面 * @ORM\Entity(repositoryClass="Plugin\Test1\Repository\Test1Repository") * @param Application $app * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ public function index(Application $app, Request $request) { // Plugin/Form/Type/Test1FormType.phpから retest1_fromを受け取り $builder = $app['form.factory']->createBuilder('retest1_form'); $form = $builder->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { switch ($request->get('mode')) { case 'confirm': $builder->setAttribute('freeze', true); $form = $builder->getForm(); $form->handleRequest($request); return $app->render('Test1/Resource/template/Test1/comfirm.twig', array( 'form' => $form->createView(), )); case 'complete': $data = $form->getData(); // データベースへの保存 $app['orm.em']->persist($data); $app['orm.em']->flush(); // メール送信 $app['eccube.service.mail']->sendInfoSendMail($data); return $app->redirect($app->url('contact_complete')); } } return $app->render('Test1/Resource/template/Test1/index.twig', array( 'form' => $form->createView(), )); } } } _____________________________________________________________________________ case 'complete': //データベースへの保存の以下のコードが [ORMInvalidArgumentException in ORMInvalidArgumentException.php line 169: EntityManager#persist() expects parameter 1 to be an entity object, array given.] のエラーを出します。 $dataは$formからデータを受け取っているみたいなのですが, persistしてDoctrineの管理下に入る事ができません。 エンティティ ReTest1をNewして下記の様なコードにするとDBのテーブルに保存されます。(エンティティ ReTest1はID,Name01,Name02,Emailだけの単純なモノです。) $data = $form->getData(); $ReTest1 = new ReTest1($data); // 'tanaka' 'matsuhide' '********@gmail.com')を$dataにすると // 同じエラーが出る。 $ReTest1->setName01('tanaka'); $ReTest1->setName02('matsuhide'); $ReTest1->setEmail(''********@gmail.com'); $app['orm.em']->persist($ReTset1); $app['orm.em']->flush(); でもこれでは変数からではなくコントローラにデータを入力をしなくてはいけないので お客様からのメール情報を自動的にDBテーブルに保存するの第一目的が達成されません。 ちなみにローカル環境でSymfony2 入門を参考書通りに $data = $form->getData(); $app['orm.em']->persist($data); $app['orm.em']->flush(); でメール内容がDBテーブルに保存されます。 何故 なのでしょうか? 1ヶ月以上 試行錯誤しましたが やりつくし どうしたらいいのか方向がわかりません。 素人的な質問かと思いますが、どうか教えて頂けると有難いです。 宜しく お願い致します。 |
minori |
投稿日時: 2018/2/15 20:39
対応状況: −−−
|
常連 登録日: 2017/10/12 居住地: 投稿: 40 |
Re: メールからのフォームデータをDBテーブルに自動保存させたい。 Plugin/Form/Type/Test1FormType.phpは
どのようになっているでしょうか。
上記エラーを見る限りだと、 persistに渡している引数の$dataがEntityではなく配列だったため エラーになっているようです。 $form->getData()でEntityを取得するには FormTypeで関連するEntityを紐付けてあげる必要があります。 たとえば、会員情報のFormTypeであるEntryTypeだと 以下のように設定しています。 Eccube/Form/Type/Front/EntryType.php
上記を参考に、Test1FormType.phpの内容を見直してみてはいかがでしょうか。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |