EC-CUBE4 Serviceクラスのカスタマイズ方法

EC-CUBE4

EC-CUBE4 での Serviceクラスのカスタマイズ方法 をご紹介します。

Seviceクラスは、EC-CUBE4の機能のほとどんが入っており重要なクラスです。

なので、カスタマイズする機会は多いと思います。そんな時に役に立ててくれれば嬉しいです。

Serviceクラスのカスタマイズ

今回は例として、OrderHelperクラスをカスタマイズしたいと思います。

Step1. services.yamlにカスタマイズしたいクラスの追記

app/config/eccube/services.yaml 以下のようなカスタマイズしたいファイル名カスタマイズするファイル名を記述しましょう。

services:
    ...
    Customize\Service\*任意のファイル名*:
        decorates: Eccube\Service\OrderHelper

今回はOrderHelperクラスを拡張しますので、

services:
    ...
    Customize\Service\OrderHelper:
        decorates: Eccube\Service\OrderHelper

こんな感じになりますね。

Step2. Customize配下にカスタマイズファイルを用意する

app/Customize/Serivce/ にservices.yamlで指定したファイルOrderHelper.phpを作成する。

<?php
namespace Customize\Service;

use Eccube\Service\OrderHelper as BaseOrderHelper;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\EntityManagerInterface;
use Eccube\Entity\CartItem;
use Eccube\Entity\Master\OrderItemType;
use Eccube\Entity\OrderItem;
use Eccube\Repository\DeliveryRepository;
use Eccube\Repository\Master\DeviceTypeRepository;
use Eccube\Repository\Master\OrderItemTypeRepository;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Repository\Master\PrefRepository;
use Eccube\Repository\OrderRepository;
use Eccube\Repository\PaymentRepository;
use SunCat\MobileDetectBundle\DeviceDetector\MobileDetector;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

class OrderHelper extends BaseOrderHelper
{

}

このクラスの中にカスタマイズしたい関数をオーバーライドすれば完成です。

おわり

最後までご覧いただきありがとうございます。

疑問に思うことがあればどんどんコメントください!

例. createOrderItemsFromCartItemsをオーバーライド
<?php
namespace Customize\Service;

use Eccube\Service\OrderHelper as BaseOrderHelper;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\EntityManagerInterface;
use Eccube\Entity\CartItem;
use Eccube\Entity\Master\OrderItemType;
use Eccube\Entity\OrderItem;
use Eccube\Repository\DeliveryRepository;
use Eccube\Repository\Master\DeviceTypeRepository;
use Eccube\Repository\Master\OrderItemTypeRepository;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Repository\Master\PrefRepository;
use Eccube\Repository\OrderRepository;
use Eccube\Repository\PaymentRepository;
use SunCat\MobileDetectBundle\DeviceDetector\MobileDetector;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

class OrderHelper extends BaseOrderHelper
{
    /**
     * @param Collection|ArrayCollection|CartItem[] $CartItems
     *
     * @return OrderItem[]
     */
    protected function createOrderItemsFromCartItems($CartItems)
    {
       //任意の処理
    }
}

任意の処理に希望の動きに処理変更すればカスタマイズできますね!

コメント

タイトルとURLをコピーしました