Antworten:
Wenn Sie dies direkt aus der .phtml
Datei heraus tun möchten, verwenden Sie den folgenden Code:
$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();
}
Nach dem Login werden Sie automatisch zur aktuellen Ansicht weitergeleitet.
Die Verwendung von Object Manager ist jedoch keine gute Vorgehensweise. Sie sollten nach Möglichkeit die Abhängigkeitsinjektion verwenden.
@Krupali, wenn Sie fest davon überzeugt sind, dass Ihr Code in einer Vorlage implementiert wird, ist das Beispiel von @Bartlomiej Szubert die bessere Wahl. Im Allgemeinen empfiehlt es sich, diese Implementierungsdetails aus Ihrer Vorlage zu verbergen und die Logik auf etwas anderes (Block oder Helfer) zu abstrahieren.
Hier ist ein Beispiel für eine Hilfsimplementierung:
<?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();
}
}
}
Dann können Sie in Ihrer Vorlage Folgendes verwenden:
$this->helper('Ryan\CustomerRedirect\Helper\Customer')->redirectIfNotLoggedIn()
* Der gezeigte Namespace ist ein Beispiel
Auf diese Weise kann Ihr Code an anderer Stelle wiederverwendet werden. Wenn Sie die Implementierungslogik ändern möchten, mit der überprüft wird, ob jemand angemeldet ist, müssen Sie Ihre Vorlage (n) nicht ändern.
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()
sollte durch ersetzt werden, getCustomerGroupId()
da isLoggedIn
die Prüfung auf der Grundlage der Kunden-ID erfolgt, aber FPC