バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 拡張したカート情報がセッションに保存されない

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/3/14 17:03
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
拡張したカート情報がセッションに保存されない
[EC-CUBE] EC-CUBE3.0.13
[レンタルサーバ] localhost
[OS] macOS Sierra 10.12.3
[PHP] PHP5.6.10
[データベース] MySQL5.5.42
[WEBサーバ] MAMP3.5
[ブラウザ] GoogleChrome 56.0.2924.87 (64-bit)
[カスタマイズ] ハードコーディング
[現象]
独自にカート情報を拡張したのですが、セッションに保存されません。
セッションに保存するためになにか特別な処理が必要なのでしょうか?

src/Eccube/Service/CartService.php
function setProductQuantity() にて$this->cartに情報を追加しました。

商品をカートに入れた直後の処理でセッションに保存されていることを確認しました。
src/Eccube/Controller/ProductController.php

$app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'])->save();
var_dump($app['session']->get('cart')->getCartItems());
die;


リダイレクト後のカートページにてセッション内のカートに拡張情報が保存されておらずnullになっていることを確認しました。
src/Eccube/Controller/CartController.php

$Cart = $app['eccube.service.cart']->getCart();
var_dump($Cart);
die;
umebius
投稿日時: 2017/3/14 17:06
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 拡張したカート情報がセッションに保存されない
どのように拡張されたのでしょうか?
CartServiceやCartItemなどをきちんとカスタマイズすれば保存されますよ。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

h_tanaka
投稿日時: 2017/3/14 17:45
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 拡張したカート情報がセッションに保存されない
umebius様、ご返信ありがとうございます。
全部書き出すと長文になりますので、省略して書きます。

カート追加フォーム
src/Eccube/Form/Type/AddCartType.php
            $builder->add('item0', 'choice', array(
                'label' => '拡張',
                'required' => true,
                'choices' => array('__unselected' => '選択してください') + ['1', '2'],
            ));


カートコントローラー:カートに追加
src/Eccube/Controller/ProductController.php
             $app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'],  $addCartData['item0'])->save();


カートサービス
src/Eccube/Service/CartService.php
    addProduct()内
        $this->setProductQuantity($productClassId, $quantity, $Choice);

    setProductQuantity()内
        if (!is_null($Choice)) {
            $CartItem->setChoice($Choice);
        }


カートアイテムエンティティ
src/Eccube/Entity/CartItem.php
    private $Choice;
    public function setChoice($Choice)
    {
        $this->Choice = $Choice;
        return $this;
    }


カートコントローラー:表示
src/Eccube/Controller/CartController.php
        $Cart = $app['eccube.service.cart']->getCart();


カート表示
src/Eccube/Resource/template/default/Cart/index.twig
         {% set Choice = CartItem.Choice %}
aoki.u
投稿日時: 2017/3/14 17:56
対応状況: −−−
常連
登録日: 2017/2/19
居住地:
投稿: 53
Re: 拡張したカート情報がセッションに保存されない
想像するに、CartItemの__sleepメソッドで追加情報を保持していないのでは?


----------------
ECCUBE3系のインテグレートパートナーとして
カスタマイズやプラグイン開発に専念しています。
ぜひご相談ください。

h_tanaka
投稿日時: 2017/3/14 18:09
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 拡張したカート情報がセッションに保存されない
aoki.u様

まさにそのとおりでした!
CartItemの__sleep()に追加することで解決しました。

この__sleep()ってなにものなんでしょうか...?
aoki.u
投稿日時: 2017/3/14 18:14
対応状況: −−−
常連
登録日: 2017/2/19
居住地:
投稿: 53
Re: 拡張したカート情報がセッションに保存されない

CartItemはシリアライズされてセッションに保存されますので。

http://ir2.php.net/manual/ja/oop4.magic-functions.php


----------------
ECCUBE3系のインテグレートパートナーとして
カスタマイズやプラグイン開発に専念しています。
ぜひご相談ください。

h_tanaka
投稿日時: 2017/3/14 18:21
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 拡張したカート情報がセッションに保存されない
うーん、、まったく理解できないです。
決まり文句と思って実装します。
ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
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.