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) { //任意の処理 } }
任意の処理に希望の動きに処理変更すればカスタマイズできますね!
コメント