回答:
.phtml
ファイルから直接実行する場合は、次のコードを使用します。
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('\Magento\Customer\Model\Session');
$urlInterface = $objectManager->get('\Magento\Framework\UrlInterface');
if(!$customerSession->isLoggedIn()) {
$customerSession->setAfterAuthUrl($urlInterface->getCurrentUrl());
$customerSession->authenticate();
}
その後、ログイン後、自動的に現在のビューにリダイレクトされます。
ただし、Object Managerを使用することはお勧めできません。可能な限り、依存性注入を使用する必要があります。
@Krupali、コードがテンプレートに実装されていることを確信している場合は、@ Bartlomiej Szubertの例の方が適しています。一般に、これらの実装の詳細をテンプレートから隠し、ロジックを他の何か(ブロックまたはヘルパー)に抽象化することがベストプラクティスです。
これはヘルパー実装の例です:
<?php
namespace Ryan\CustomerRedirect\Helper;
use Magento\Customer\Model\Session;
use Magento\Framework\App\Helper\AbstractHelper;
use Magento\Framework\App\Helper\Context;
use Magento\Framework\UrlInterface;
class Customer extends AbstractHelper
{
/**
* @var Session
*/
private $customerSession;
/**
* @var UrlInterface
*/
private $urlInterface;
public function __construct(
Context $context,
Session $customerSession,
)
{
parent::__construct($context);
$this->customerSession = $customerSession;
$this->urlInterface = $context->getUrlBuilder();
}
public function redirectIfNotLoggedIn()
{
if (!$this->customerSession->isLoggedIn()) {
$this->customerSession->setAfterAuthUrl($this->urlInterface->getCurrentUrl());
$this->customerSession->authenticate();
}
}
}
次に、テンプレートで次のようなものを使用できます。
$this->helper('Ryan\CustomerRedirect\Helper\Customer')->redirectIfNotLoggedIn()
*示されている名前空間は例です
このようにして、コードを他の場所で再利用できます。また、誰かがログインしているかどうかを確認する方法の実装ロジックを変更する場合は、テンプレートを変更する必要はありません。
Find the below working code from core file to redirect other page in controller.
<?php
namespace Vendorname\Yourmodulename\Controller\Contact;
use Magento\Customer\Model\Session;
use Magento\Framework\App\Action\Context;
use Magento\Customer\Model\Customer;
class Index extends \Magento\Framework\App\Action\Action
{
protected $customerSession;
protected $customers;
public function __construct(
Context $context,
Session $customerSession,
Customer $customers
)
{
parent::__construct($context);
$this->customerSession = $customerSession;
$this->customers = $customers;
}
public function execute()
{
if ($this->customerSession->isLoggedIn()) {
//Get customer by customerID.
$customerId = $this->customerSession->getCustomerData()->getId();
$customer = $this->customers->load($customerId);
if($customer->getUserRole() != '' && $customer->getUserRole() == 'admin')
{
$this->_view->loadLayout();
$this->_view->getLayout()->initMessages();
$this->_view->renderLayout();
}
}
else{
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath('customer/account/login/');
return $resultRedirect;
}
}
}
isLoggedIn()
はcustomerIdに基づいてチェックしているgetCustomerGroupId()
ため、で置き換える必要がありisLoggedIn
ますが、顧客グループとは異なり、FPCはこの値をNULLにフラッシュしています