バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
okotaro
投稿日時: 2020/11/11 2:00
対応状況: −−−
新米
登録日: 2018/10/17
居住地:
投稿: 6
ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
お忙しいところ恐れ入ります。
色々調べてみたのですが、解決に至らないためご教示願います。

プログラミングの勉強を兼ねてEC-CUBE3の非会員のご注文内容確認画面(/shopping/nonmember)に
年齢確認のラジオボタンを追加するためにマスターテーブルおよび下記ファイルを作成/修正し、
ラジオボタンによる年齢確認およびその結果をDBに格納することができるようになりました。

しかし、ご注文内容確認画面(/shopping)に遷移後、「注文する」ボタンをクリックせずに
トップ画面に戻り、更に商品の検索および追加後、購入処理を続けたところ、
ご注文内容確認画面(/shopping)にて下記エラーメッセージが表示されるようになり、以降は処理を進めることができなくなりました。

色々調べてみたところ、本サイトの下記質問の回答で対処できるのではと思い、
ShoppingService.phpに下記の通り追記いたしましたが解決に至りませんでした。

このエラーの解消法および他の作業で発生した場合にセッションをクリアする手順を
ご教示いただけないでしょうか。

[エラーメッセージ]
ORMInvalidArgumentException in ORMInvalidArgumentException.php line 91:
A new entity was found through the relationship 'Eccube\Entity\Order#R18' that was not configured to cascade persist operations for entity: 18歳以上.
To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).

[参考質問]
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=20341&forum=17

[ShoppingService.phpへの追加コード]
※getNonMemberメソッドへ下記を追加

if (!array_key_exists('customer', $nonMember) || !array_key_exists('r18', $nonMember)) {
return null;
}

$Customer = $nonMember['customer'];
$Customer->setPropertiesFromArray($nonMember, array('customer', 'id', 'r18', 'email', 'password', 'salt'));
$Customer->setR18($this->app['eccube.repository.master.r18']->find($nonMember['r18']));
return $Customer;


[作業内容]
※未熟なため不要な設定が入っている可能性がございます。

 ①mtb_sexを参考にmtb_r18の作成。
 ②dtb_orderへorder_sexカラムを参考にorder_r18カラムを追加。
 ③/src/Eccube/Controller/ShoppingController.phpにr18を追加。
 ④/src/Eccube/Entity/Customer.phpにr18を追加。
 ⑤/src/Eccube/Entity/Order.phpにr18を追加。
 ⑥/src/Eccube/Entity/Master/R18.phpを作成(Sex.phpを参考)。
 ⑦/src/Eccube/Form/Type/OrderSearchType.phpにr18を追加。
 ⑧/src/Eccube/Form/Type/Frontにr18を追加。
 ⑨/src/Eccube/Form/Type/Master/R18Type.phpを作成(Sex.phpを参考)。
 ⑩/src/Eccube/Repository/OrderRepository.phpにr18を追加。
 ⑪/src/Eccube/Repository/Master/R18Repository.phpを作成(Sex.phpを参考)。
 ⑫/src/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.ymlにr18を追加。
 ⑬/src/Eccube/Resource/doctrine/master/Eccube.Entity.Master.R18.dcm.ymlを作成(Sex.phpを参考)。
 ⑭/src/Eccube/ServiceProvider/EccubeServiceProvider_org.phpにr18を追加。
 ⑮/src/Eccube/Service/ShoppingService.php
  ※copyToOrderFromCustomerメソッドへ下記を追加、他は未実施。
   $Order
    ->setR18($Customer->getR18())
 ⑯/app/template/default/Shopping/nonmember.twig
 
[EC-CUBE] 3.0.18
[レンタルサーバ] ロリポップ!
[PHP] 5.6
[データベース] mysql5.6
[導入プラグインの有無] なし
468
投稿日時: 2020/11/14 2:29
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
OrderエンティティとR18エンティティのリレーションで不整合が起きているのではないでしょうか?

$Customer->setR18($this->app['eccube.repository.master.r18']->find($nonMember['r18']));
の$nonMember['r18']には非会員情報入力時のr18の選択結果が正常に格納されていますか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

okotaro
投稿日時: 2020/11/14 3:22
対応状況: −−−
新米
登録日: 2018/10/17
居住地:
投稿: 6
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
早速ご回答いただき、ありがとうございます。

shiro8様のご指摘について理解はしているつもりですが、「EC-CUBE3上でどのようにして確認すればよいか」についてはよくわかっていないため、
その方法とご指摘の内容について調べてから改めてご報告いたします。

ご協力いただき、感謝いたします。

468
投稿日時: 2020/11/14 11:17
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
symfonyにデバッグ用のdump関数が用意されていると思いますので
ソース内に
dump($Customer);
のような記述を追加して、デバッグモードで操作を行えば、
クラスオブジェクトの内容を確認できるかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

okotaro
投稿日時: 2020/11/15 1:12
対応状況: −−−
新米
登録日: 2018/10/17
居住地:
投稿: 6
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
ご教示いただきありがとうございます。

不慣れなため、例示いただいた内容の確認にお時間を頂戴しております。

例示いただいたコードをShoppingService.php内のgetNonMember($sesisonKey)メソッド内にdump($Customer);とdump($nonMember);追記しましたが
エラーメッセージ自体は変わりませんでした(認識通り)が、上記コードの出力がどこにされているのかわかりませんでした。

そもそもの例示いただいた確認方法についての質問で恐縮ですが、例示されたようにコード(dump($Customer);)を追記すると、
SymfonyprofilerのDUMP()ボタンの遷移先(/index_dev.php/_profiler/f30f27?panel=dump)に表示されるということでしょうか。

もしその通りでしたら先の追記した結果については「dump() No dumped variable」となっておりました。

以上から私のコードの追記するファイルが間違っているか、コードの出力結果が表示される場所の理解が間違っていると認識しております。

明日も予定があるため、すぐには確認ができないですが、例示いただいた後に検索し、list.twigに{{ dump(pagination) }}を追加すると表示されるという
記事を見かけましたのでこちらも試してみたいと考えております。

レスが遅く、恐縮ですが確認にもうしばらくお時間をいただければ幸いです。
okotaro
投稿日時: 2020/11/23 3:14
対応状況: −−−
新米
登録日: 2018/10/17
居住地:
投稿: 6
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
お世話になっております。
あれから色々調べてみたり試してみたりしたのですが、どうしてもエラー画面のまま、dump($Customer);のコードから結果を得ることが出来ませんでした。

また、これで正しいのか判断が付いておりませんが、Symfonyprofilerにて下記を確認しております。
下記内容から取得できているという認識ですがいかがでしょうか。

eccube.front.shopping.nonmember(一部抜粋)
r18 => 1

eccube.front.shopping.nonmember.customeraddress(一部抜粋)
"R18":{}

また、お手数ではございますがもう少しdump()についてご教示いただけないでしょうか。

 ・ご教示いただきたい内容
   dump() をShoppingServiceに記載した場合、dump()が出力される画面は/shopping/index.twigという認識で良いでしょうか。

本筋の事象から逸れたご相談ばかりとなってしまい恐縮ですが、よろしくお願いいたします。





468
投稿日時: 2020/11/24 12:03
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
ShoppingService.phpへの追加コードの

if (!array_key_exists('customer', $nonMember) || !array_key_exists('r18', $nonMember)) {
return null;
}

//ここでdump
dump($nonMember);

$Customer = $nonMember['customer'];
$Customer->setPropertiesFromArray($nonMember, array('customer', 'id', 'r18', 'email', 'password', 'salt'));
$Customer->setR18($this->app['eccube.repository.master.r18']->find($nonMember['r18']));
return $Customer;

で$noMemberのr18に/Master/R18Entityがセットされているかどうか確認できるのではないでしょうか?
何も表示されないようであれば
dump($nonMember);
exit;
で無理やり処理を止めれば、dumpの内容が表示されて処理が止まると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

okotaro
投稿日時: 2020/11/25 1:21
対応状況: −−−
新米
登録日: 2018/10/17
居住地:
投稿: 6
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
連絡が遅くなってしまい、大変申し訳ございません。
ご教示いただいた内容を元に実施したところ、問題なく表示されました。

ShoppingService.phpに追加したコードがの直前にある「return $Customer;」をそのままにしていたため、
追加コード内に「dump($nonMember);」を追記しても表示されませんでした。

コードの修正後「dump($nonMember);」を取得しました。

■dump($nonMember);取得結果(抜粋)

ShoppingService.php on line 127:
array:42 [▼
〜省略〜
"R18" => R18 {#1408 ▼
-id: 1
-name: "18歳以上"
-rank: 0
〜省略〜
"CustomerAddresses" => ArrayCollection {#1412 ▼
-elements: array:1 [▼
0 => CustomerAddress {#1413 ▼
-id: null
〜省略〜
-Customer: Customer {#1414 ▼
-id: null
〜省略〜
-R18: R18 {#1408 ▼
-id: 1
-name: "18歳以上"
-rank: 0
〜省略〜
"r18" => 1

最終行にあるとおり、r18は取得できているようです。
また、ShoppingService.phpに追加したコードを修正した結果、エラーメッセージが若干変わりました。

[エラーメッセージ]
ORMInvalidArgumentException in ORMInvalidArgumentException.php line 91:
A new entity was found through the relationship 'Eccube\Entity\Order#Pref' that was not configured to cascade persist operations for entity: 神奈川県. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}).

色々調べたり試しているなかで意図しない修正を行ってしまった可能性もありますので、
一旦Prefの設定について見なおしてみたいと思います。
okotaro
投稿日時: 2020/11/28 19:41
対応状況: 解決済
新米
登録日: 2018/10/17
居住地:
投稿: 6
Re: ご注文内容確認画面からトップページへ遷移後、再度商品追加し決済しようとするとエラーになる
468 様

ShoppingService.phpへの追加コードを下記のように修正することで改善いたしました。
468様のお陰です。
初歩的な質問にもご回答いただき、本当にありがとうございました。


ShoppingService.php

public function getNonMember($sesisonKey)
{

// 非会員でも一度会員登録されていればショッピング画面へ遷移
$nonMember = $this->app['session']->get($sesisonKey);
if (is_null($nonMember)) {
return null;
}
if (!array_key_exists('customer', $nonMember) || !array_key_exists('pref', $nonMember) || !array_key_exists('r18', $nonMember)) {
return null;
}

$Customer = $nonMember['customer'];
$Customer->setPropertiesFromArray($nonMember, array('customer', 'id', 'pref', 'email', 'password', 'salt', 'r18'));
$Customer->setPref($this->app['eccube.repository.master.pref']->find($nonMember['pref']));
$Customer->setR18($this->app['eccube.repository.master.r18']->find($nonMember['r18']));
return $Customer;
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.