Вызывая синтаксис функции класса php
В настоящее время я ищу этот кусок кода из модуля под названием ZfcUser для Zend 2:
namespace ZfcUser\Controller;
use Zend\Form\Form;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Stdlib\ResponseInterface as Response;
use Zend\Stdlib\Parameters;
use Zend\View\Model\ViewModel;
use ZfcUser\Service\User as UserService;
use ZfcUser\Options\UserControllerOptionsInterface;
class UserController extends AbstractActionController
{
/**
* @var UserService
*/
protected $userService;
.
.
public function indexAction()
{
if (!$this->zfcUserAuthentication()->hasIdentity()) {
return $this->redirect()->toRoute('zfcuser/login');
}
return new ViewModel();
}
.
.
}
В пространстве имен ZfcUser\Controller\Plugin:
пространство имен ZfcUser\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\Authentication\AuthenticationService;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use Zend\ServiceManager\ServiceManager;
use ZfcUser\Authentication\Adapter\AdapterChain as AuthAdapter;
class ZfcUserAuthentication extends AbstractPlugin implements ServiceManagerAwareInterface
{
/**
* @var AuthAdapter
*/
protected $authAdapter;
.
.
/**
* Proxy convenience method
*
* @return mixed
*/
public function hasIdentity()
{
return $this->getAuthService()->hasIdentity();
}
/**
* Get authService.
*
* @return AuthenticationService
*/
public function getAuthService()
{
if (null === $this->authService) {
$this->authService = $this->getServiceManager()->get('zfcuser_auth_service');
}
return $this->authService;
}
Мои вопросы:
- Из indexAction() плагин контроллера вызывается без создания экземпляра ($this->zfcUserAuthentication()->hasIdentity()), плагины контроллера всегда работают так?
- Что на самом деле происходит в hasIdentity()? Я вижу, что getAuthService() возвращает что-то, но не hasIdentity(). Я не знаком с этим типом реализации расширенного класса для вызова функций, поэтому я был бы очень признателен за любое объяснение здесь или тему, которую я должен изучить.
2 ответа
Я не могу ответить на ваш первый вопрос, но относительно вашего второго вопроса:
getAuthService()
Метод в вашем коде возвращает AuthenticationService
объект, который имеет hasIdentity()
метод.
Так что есть два разных hasIdentity()
методы:
- в
AuthenticationService
класс ( исходный код здесь). - в
ZfcUserAuthentication
класс, на который вы смотрите.
Эта строка кода в ZfcUserAuthentication
учебный класс:
return $this->getAuthService()->hasIdentity();
делает три вещи:
$this->getAuthService()
возвращаетAuthenticationService
объект.hasIdentity()
метод этогоAuthenticationService
Затем вызывается объект, и он возвращаетboolean
,- Тот
boolean
затем возвращается.
Представьте себе разделение кода на две части:
// Get AuthenticationService object Call a method of that object
$this->getAuthService() ->hasIdentity();
Надеюсь, это поможет!
Все виды плагинов в Zend Framework управляются менеджерами плагинов, которые являются подклассами AbstractPluginManager, который является подклассом ServiceManager.
$this->zfcUserAuthentication()
прокси от AbstractController к внутреннему модулю плагинов.
AuthenticationService::hasIdentity()
проверяет, было ли что-то добавлено в хранилище во время успешной попытки аутентификации в этом или предыдущем запросе: см. здесь