回答:
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance();
//顧客をロードします
$ customer = $ objectManager-> create( 'Magento \ Customer \ Model \ Customer')-> load(2); // 2はお客様IDです
//顧客セッションを読み込みます
$ customerSession = $ objectManager-> create( 'Magento \ Customer \ Model \ Session');
$ customerSession-> setCustomerAsLoggedIn($ customer);
if($ customerSession-> isLoggedIn()){
echo "お客様がログインしました";
}そうしないと{
echo "顧客はログインしていません";
}
最近のMagento 2のより良い方法は次のとおりです。
保護された$ _customerFactory;
保護された$ _sessionFactory;
パブリック関数__construct(
...
\ Magento \ Customer \ Model \ CustomerFactory $ customerFactory、
\ Magento \ Customer \ Model \ SessionFactory $ sessionFactory、
...
)
{
...
$ this-> _ customerFactory = $ customerFactory;
$ this-> _ sessionFactory = $ sessionFactory;
...
}
これがMagento 2コントローラー上にあるとすると、次のようになります。
パブリック関数execute()
{
...
$ customer = $ this-> _ customerFactory-> create()-> load($ id)// $ idは
ロードする顧客ID
$ sessionManager = $ this-> _ sessionFactory-> create();
$ sessionManager-> setCustomerAsLoggedIn($ customer);
...
}
オブジェクトマネージャーのインスタンスを取得する代わりに、依存関係注入を使用して、使用するツールのモデルファクトリまたはインターフェイスを取得することが常にベストプラクティスです。
app / code / Magento / Customer / Controller / Account / LoginPost.phpを見てください。
class LoginPost extends \Magento\Customer\Controller\AbstractAccount
{
....
public function execute()
{
if ($this->session->isLoggedIn() || !$this->formKeyValidator->validate($this->getRequest())) {
/** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath('*/*/');
return $resultRedirect;
}
if ($this->getRequest()->isPost()) {
$login = $this->getRequest()->getPost('login');
if (!empty($login['username']) && !empty($login['password'])) {
try {
$customer = $this->customerAccountManagement->authenticate($login['username'], $login['password']);
$this->session->setCustomerDataAsLoggedIn($customer);
$this->session->regenerateId();
....