Laravelでカート機能を実装する方法【LaravelShoppingcart】

Laravelでカート機能を実装する方法【LaravelShoppingcart】

どうもこんにちは塚本です!

外の世界のことが分からないので
とっても気になるのですが,
皆さんはECサイトを構築されるときは何を使っているのでしょうか?

Laravelでカート機能を導入する際は,
LaravelShoppingcartが便利だったので紹介します.

LaravelShoppingcart

LaravelShoppingcart はシンプルなショッピングカート機能をLaravelに追加してくれるライブラリです.

Installation

普通にcomposerを使えばOKです.

$ composer require gloudemans/shoppingcart

Add Providers

基本的にこれだけで動くはずですが,動かない場合はLaravelのconfig/app.phpの中の
providersGloudemans\Shoppingcart\ShoppingcartServiceProvider::classを追記してください.

providers sample

'providers' => [

    /*
     * Laravel Framework Service Providers...
     */
    Illuminate\Auth\AuthServiceProvider::class,
    Illuminate\Broadcasting\BroadcastServiceProvider::class,
    Illuminate\Bus\BusServiceProvider::class,
    Illuminate\Cache\CacheServiceProvider::class,
    ︙
    /*
     * Package Service Providers...
     */
    Gloudemans\Shoppingcart\ShoppingcartServiceProvider::class
    ︙
],

Add Alias ( Optionally )

また,オプションとして,エイリアスも追加できます.
同じくconfig/app.phpaliases
'Cart' => Gloudemans\Shoppingcart\Facades\Cart::class,を追記します.

aliases sample

'aliases' => [

    'App' => Illuminate\Support\Facades\App::class,
    'Arr' => Illuminate\Support\Arr::class,
    'Artisan' => Illuminate\Support\Facades\Artisan::class,
    'Auth' => Illuminate\Support\Facades\Auth::class,
    ︙
    'Cart' => Gloudemans\Shoppingcart\Facades\Cart::class,
],

Cart::add()

カートに商品を入れたいときはCart::add()を使用します.
以下に示すようにid, 商品名, 個数, 単価, オプション(配列)が基本の5つのパラメータになります.

Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large']);

配列を使ってカートに入れる

キーを指定することで,配列を使ってカートに追加することも可能です.

Cart::add(
    [
        'id'    => '293ad',
        'name'  => 'Product 1',
        'qty'   => 1,
        'price' => 9.99,
        'options' => [
            'size' => 'large'
        ]
    ]
);

複数アイテムの一括追加

このようにすることで複数アイテムを追加可能です.

Cart::add([
  ['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00],
  ['id' => '4832k', 'name' => 'Product 2', 'qty' => 1, 'price' => 10.00, 'options' => ['size' => 'large']]
]);

Cart::add([$product1, $product2]);

モデルと関連付ける

associate()を使うことでモデルとの関連付けが可能です.

Cart::add($item->id, $item->name, $item->quantity, $itemPrice, $options)->associate(Item::class);

Cart::content()

Cart::content()を使うことでカートの内容を取ってくることができます.

Cart::total()

Cart::total()はカートの合計金額(税込)を取ってくることができます.
金額のフォーマットはconfig/cart.phpから変更が可能です.

また,4月からはあまり使うことは無いかもしれませんが
Cart::subtotal()で税抜の合計金額を取ってこれます.

Cart::count()

Cart::count()は文字通り,カートに入っている個数を取ってこれます.

Cart::remove()

カートに入っているオブジェクトには$rowIdというものが振られています.
それを利用することで,カートから商品を削除することが出来ます.

sample

$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';

Cart::remove($rowId);

Instances

LaravelShoppingcartはカートの複数のインスタンスをサポートしています.
カート機能の他に欲しい物リストの実装サンプルが公式に記載されています.

Cart::instance('shopping')->add('192ao12', 'Product 1', 1, 9.99);

// Get the content of the 'shopping' cart
Cart::content();

Cart::instance('wishlist')->add('sdjk922', 'Product 2', 1, 19.95, ['size' => 'medium']);

// Get the content of the 'wishlist' cart
Cart::content();

// If you want to get the content of the 'shopping' cart again
Cart::instance('shopping')->content();

// And the count of the 'wishlist' cart again
Cart::instance('wishlist')->count();

まとめ

Githubに載っているサンプルから主なものを取り出しただけではありますが,ざっとこのような感じになります.

むかし,$_SESSION等を駆使して生PHPで頑張ってECサイトを作ったことを思い出しましたがそれに比べると
サクッと導入できて,サクッと使うことができるのでおすすめだと思います.