0

I create route, and controller for it. All works fine if i call route like so.

....

return $this->_pageFactory->create();

....

However when I want get user data from Magento\Customer\Model\Session inside controller i get error. I use $om to get data but i don`t know why it crash. I need user session for redirect to login form if user is not logged in.

...
        $om = $context->getObjectManager();
        $this->_customerSession = $om->get('Magento\Customer\Model\Session');
        $this->_resultFactory = $context->getResultFactory();
...

in execute

if ($this->_customerSession->isLoggedIn()) {
    return $this->_pageFactory->create();
}
$redirect = $this->_resultFactory->create(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT);
$redirect->setUrl('/customer/account/create/');
return $redirect;

So question is how to redirect customer away from route if its not log in ?

user2217288
  • 127
  • 5

1 Answers1

1

Please use like below in your controller to get customer session.

<?php
/**
 *
 * Copyright © 2015 Zmagecommerce. All rights reserved.
 */
namespace Vendor\Module\Controller\Index;

class Custom extends \Magento\Framework\App\Action\Action { protected $_customerSession;

protected $_customerUrl;

public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Customer\Model\Session $customerSession,
    \Magento\Customer\Model\Url $customerUrl
) {
    $this-&gt;_customerSession = $customerSession;
    $this-&gt;_customerUrl = $customerUrl;
    parent::__construct($context);
}

public function isCustomerLogin()
{
    return $this-&gt;_customerSession-&gt;isLoggedIn();
}

public function getCustomerLoginUrl() 
{   
    return $this-&gt;_customerUrl-&gt;getLoginUrl();
}

}

ZealousWeb
  • 2,186
  • 1
  • 4
  • 14