Вызывая синтаксис функции класса 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() методы:

Эта строка кода в 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() проверяет, было ли что-то добавлено в хранилище во время успешной попытки аутентификации в этом или предыдущем запросе: см. здесь

Другие вопросы по тегам