2016-10-10 3 views
0

Я новичок в ZF2, и я изучаю Службы и ServiceManager. Я хочу сделать «аутентификацию» через API (http://127.0.0.1/api/login), и мне нужно также взаимодействовать с БД одновременно. У меня будут некоторые данные из API после входа в систему плюс еще один, что я получу некоторые другие данные из БД.zf2 LoginServiceInterface взаимодействие с моделью

У меня есть LoginController, который имеет метод входа с

$ тест = $ this-> loginService-> Логин ($ имя пользователя, пароль $);

Я создал службу входа в систему с другим способом входа в систему:

$ apiService = новый ApiService();

$ userApi = $ apiService-> postRequest ('login /', ['email' => $ username, 'password' => $ password]);

Звонки по API Я добавил другую услугу (ApiService).

Первый вопрос: как я могу это сделать, чтобы не зависеть от ApiService? У меня есть служба, которая зависит от другой Второй вопрос: как смешать данные api с данными db в этом LoginService? лучше ли вводить модель на фабрику и звонить ей в Службу?

Поток в моей голове должен быть таким: LoginController -> LoginService -> API call -> LoginService -> DB -> LoginService -> LoginController -> виды или что-то еще.

Я знаю, что вход через API не является лучшей практикой, потому что я не делаю этого с помощью платформы авторизации, но на данный момент легко просто вызвать конечную точку и получить полный json.

Благодарим вас за ответы.

ответ

0

Вы можете инкапсулировать функцию входа в систему, создав любое количество сервисов, которые реализуют новый интерфейс, возможно, LoginServiceInterface. Этот интерфейс определит фактические методы, необходимые для аутентификации, и конкретные классы будут реализовывать их.

Интерфейс может выглядеть следующим образом.

interface LoginServiceInteface 
{ 
    public function login($username, $password);  
} 

Конкретная реализация может затем определить способ входа в систему.

class ApiLoginService implements LoginServiceInterface 
{ 
    protected $dbAdapter; 
    protected $apiService; 

    public function __construct(ApiServiceInterface $apiService, Adapter $dbAdapter) 
    { 
     $this->dbAdapter = $dbAdapter; 
     $this->apiService = $apiService; 
    } 

    public function login($username, $password) 
    { 
     // do some queries. 
     //$this->dbAdapter->query('')... 

     $response = $this->apiService->makeSomeCallToApi([$username, $password]); 

     if ($response) { 
      return true; 
     } 
     return false; 
    } 
} 

Вам также необходимо зарегистрировать класс у менеджера сервиса и создать фабрику услуг, чтобы вставлять зависимости.