バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > メールからのフォームデータを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は
どのようになっているでしょうか。

[ORMInvalidArgumentException in ORMInvalidArgumentException.php line 169: EntityManager#persist() expects parameter 1 to be an entity object, array given.]

上記エラーを見る限りだと、
persistに渡している引数の$dataがEntityではなく配列だったため
エラーになっているようです。

$form->getData()でEntityを取得するには
FormTypeで関連するEntityを紐付けてあげる必要があります。

たとえば、会員情報のFormTypeであるEntryTypeだと
以下のように設定しています。

Eccube/Form/Type/Front/EntryType.php
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Eccube\Entity\Customer',
    ));
}

上記を参考に、Test1FormType.phpの内容を見直してみてはいかがでしょうか。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,305名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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