質問編集履歴

1

ご質問のレベルに達していないロジックだったので大幅に修正しました。

2020/02/20 06:18

投稿

yamada_take
yamada_take

スコア10

test CHANGED
File without changes
test CHANGED
@@ -4,50 +4,144 @@
4
4
 
5
5
 
6
6
 
7
+
8
+
7
- 修正る場所場所は
9
+ カートの内容を確定時にテキストに書き出ロジックを、
8
10
 
9
11
  「src\Eccube\Controller\ShoppingController.php」の
10
12
 
11
- 「public function complete(Request $request)」内
13
+ 「public function checkout(Request $request)」内
12
14
 
13
- 記載すればいいのではと思っておりますが、どのような記述をすれば現できるかずっと悩んでおり
15
+ カート削除前に実装しした
14
16
 
15
17
 
16
18
 
17
- サンプルとして見つけた記述を基に以下で実現できるかと思い実行すると「$app」がNullのため実行エラーになってしまいます。
19
+ ```PHP
18
20
 
19
- ```Sample
21
+ // csvへの出力処理
20
22
 
23
+ try {
24
+
25
+ //カートサービスよりカート情報を取得
26
+
27
+ $cartData = $this->cartService->getCart();
28
+
29
+ //カート情報よりアイテム取得
30
+
31
+ $cartItems = $cartData->getItems();
32
+
33
+
34
+
35
+ // 受注保存用ファイルオープン
36
+
21
- $app = New Application; //サンプルになかったのでNullエラー回避のため自分で追加。
37
+ $fhandle = fopen( $Order->getOrderNo()."_juchu_comp.csv", "a");
22
38
 
23
39
 
24
40
 
25
- $app['eccube.service.csv.export']->exportData(function ($entity, $csvService) {`
41
+ if ($fhandle === false) {
26
42
 
27
- $Csvs = $csvService->getCsvs();
43
+ log_error('[注文処理] 保存エラーが発生しました.');
28
44
 
29
- $Order = $entity;
45
+ $this->entityManager->rollback();
46
+
47
+ return $this->redirectToRoute('shopping_error');
48
+
49
+ }
50
+
51
+ $outDateShare = $cartData->getCustomer()->getId().',';
52
+
53
+ $outDateShare .= $cartData->getCustomer()->getName01().',';
54
+
55
+ $outDateShare .= $cartData->getCustomer()->getEmail().',';
30
56
 
31
57
 
32
58
 
33
- $row = array();
59
+ foreach ($cartItems as $cartitem) {
34
60
 
35
- // CSV出力項目と合致するデータを取得.
61
+ $outData = $outDateShare;
36
62
 
37
- foreach ($Csvs as $Csv) {
63
+ $outData .= $cartitem->getProductClass()->getCode().',';
38
64
 
39
- // 受注データを検索.
65
+ $outData .= $cartitem->getProductClass()->getProduct()->getName().',';
40
66
 
41
- $row[] = $csvService->getData($Csv, $Order);
67
+ $outData .= $cartitem->getQuantity().',';
42
68
 
43
- }
69
+ $outData .= $cartitem->getPrice().',';
44
70
 
45
- $csvService->fputcsv($row);
71
+ $outData .= PHP_EOL;
46
72
 
73
+
74
+
75
+ if (fwrite($fhandle, $outData) === false) {
76
+
77
+ log_error('[注文処理] 書き込みエラーが発生しました.');
78
+
79
+ $this->entityManager->rollback();
80
+
81
+ return $this->redirectToRoute('shopping_error');
82
+
47
- });
83
+ }
84
+
85
+ }
86
+
87
+
88
+
89
+ // ファイルを閉じる
90
+
91
+ fclose($fhandle);
92
+
93
+ catch (Exception $e) {
94
+
95
+ log_error('[注文処理] 保存処理エラーが発生しました.', [$e->getMessage()]);
96
+
97
+ $this->entityManager->rollback();
98
+
99
+ $this->addError($e->getMessage());
100
+
101
+ return $this->redirectToRoute('shopping_error');
102
+
103
+ }
104
+
105
+
106
+
107
+ // カート削除
108
+
109
+ log_info('[注文処理] カートをクリアします.', [$Order->getId()]);
110
+
111
+ $this->cartService->clear();
48
112
 
49
113
  ```
50
114
 
51
115
 
52
116
 
53
- 実現可能方法又はアドバイスお願します
117
+ ここでの処理は全て正常終了しますが、そのあと「システムエラー」とり以下のログが出力されます。調査又は見直すべき部分教えてください。
118
+
119
+
120
+
121
+ ```log
122
+
123
+ システムエラーが発生しました。
124
+
125
+ ["A new entity was found through the relationship 'Eccube\Entity\CartItem#Cart' that was not configured to cascade persist operations for entity: Eccube\Entity\Cart@000000002730a39b00000000111e5af7. 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\"}). If you cannot find out which entity causes the problem implement 'Eccube\Entity\Cart#__toString()' to get a clue.",
126
+
127
+ "C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\ORMInvalidArgumentException.php",102,"
128
+
129
+ #0 C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(3443): Doctrine\ORM\ORMInvalidArgumentException::newEntitiesFoundThroughRelationships(Array)\n
130
+
131
+ #1 C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(362): Doctrine\ORM\UnitOfWork->assertThatThereAreNoUnintentionallyNonPersistedAssociations()\n
132
+
133
+ #2 C:\xampp\htdocs\eccube4\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php(359): Doctrine\ORM\UnitOfWork->commit(NULL)\n#3 C:\xampp\htdocs\eccube4\var\cache\prod\ContainerCqirhhx\EntityManager_9a5be93.php(83): Doctrine\ORM\EntityManager->flush(NULL)\n
134
+
135
+ #4 C:\xampp\htdocs\eccube4\src\Eccube\Controller\ShoppingController.php(481): EntityManager_9a5be93->flush()\n
136
+
137
+ #5 C:\xampp\htdocs\eccube4\vendor\symfony\http-kernel\HttpKernel.php(151): Eccube\Controller\ShoppingController->checkout(Object(Symfony\Component\HttpFoundation\Request))\n
138
+
139
+ #6 C:\xampp\htdocs\eccube4\vendor\symfony\http-kernel\HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)\n
140
+
141
+ #7 C:\xampp\htdocs\eccube4\vendor\symfony\http-kernel\Kernel.php(200): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)\n
142
+
143
+ #8 C:\xampp\htdocs\eccube4\index.php(76): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))\n
144
+
145
+ #9 {main}"] [POST, /eccube4/shopping/checkout, ::1, http://localhost/eccube4/shopping/confirm, Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36]
146
+
147
+ ```