【EC-CUBE3】会員IDでログインできるプラグインを作る方法です。
app/Plugin内にCustomerLoginフォルダを用意してその中に必要なファイルを用意してプラグインを作っていきます。
まずはconfig.ymlを作ります。serviceはサービスプロバイダを読みこませるため。orm.pathはORMメタデータを読み込ませるためのパスを指定しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: カスタマーログインプラグイン | |
code: CustomerLogin | |
version: 1.0.0 | |
service: | |
- CustomerLoginServiceProvider | |
orm.path: | |
- /Resource/doctrine |
次にEntityフォルダを作ってそのなかにCustomer.phpファイルを設置します。EC-CUBE3本体のCustomerエンティティを継承しているだけです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Plugin\CustomerLogin\Entity; | |
use Eccube\Entity\Customer as BaseCustomer; | |
/** | |
* Customer | |
* | |
* @UniqueEntity("email") | |
*/ | |
class Customer extends BaseCustomer | |
{ | |
} |
次にRepositoryフォルダを作ってそのなかにCustomerRepository.phpファイルを設置します。EC-CUBE3本体のCustomerRepogitoryを継承して、loadUserByUsernameメソッドを上書きしています。ココに会員IDでログインできる処理を追加しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Plugin\CustomerLogin\Repository; | |
use Eccube\Repository\CustomerRepository as BaseRepository; | |
use Eccube\Entity\Master\CustomerStatus; | |
use Eccube\Common\Constant; | |
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; | |
class CustomerRepository extends BaseRepository | |
{ | |
public function loadUserByUsername($username) | |
{ | |
// 本会員ステータスの会員のみ有効. | |
$CustomerStatus = $this | |
->getEntityManager() | |
->getRepository('Eccube\Entity\Master\CustomerStatus') | |
->find(CustomerStatus::ACTIVE); | |
$query = $this->createQueryBuilder('c') | |
->where('c.email = :email') | |
->orWhere('c.id = :id') | |
->andWhere('c.del_flg = :delFlg') | |
->andWhere('c.Status =:CustomerStatus') | |
->setParameters(array( | |
'email' => $username, | |
'id' => $username, | |
'delFlg' => Constant::DISABLED, | |
'CustomerStatus' => $CustomerStatus, | |
)) | |
->getQuery(); | |
$Customer = $query->getOneOrNullResult(); | |
if (!$Customer) { | |
throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username)); | |
} | |
return $Customer; | |
} | |
} |
次にRepositoryクラスを登録するためにResource/doctrineフォルダを作ってそのなかにPlugin.CustomerLogin.Entity.Customer.dcm.ymlを設置します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Plugin\CustomerLogin\Entity\Customer: | |
type: entity | |
table: dtb_customer | |
repositoryClass: Plugin\CustomerLogin\Repository\CustomerRepository |
最後にServiceProviderフォルダを作ってそのなかにCustomerLoginServiceProvider.phpを設置します。
ココでログイン処理時に作ったRepositoryクラスが使われるようにsecurity.firewallsを設定しています。
ユーザーID(会員ID)ログインプラグインを作りましたので詳しくはオーナーズストアをご覧ください。
EC CUBE4で同様のカスタマイズをする場合は、かなり違ってくるのでしょうか?今、そのリクエストがクライアントからありまして、こちらのページに辿りつきました。
EC-CUBE3とEC-CUBE4では作り方は全く異なります。
突然のコメントで失礼いたします。なかなか情報がないもので、こちらの貴重な情報を頼りに試みてみようと思っております。