我是ZF2的新手,我正在研究服务和ServiceManager。我想做一个"身份验证"通过API(http://127.0.0.1/api/login),我需要同时与DB进行交互。我会在登录后从API中获得一些数据,另外一个数据我会从数据库获得一些其他数据。
我有一个登录方法
的LoginController$ test = $ this-> loginService-> login($ username,$ password);
我使用其他登录方法创建了一个登录服务:
$ apiService = new ApiService();
$ userApi = $ apiService-> postRequest('登录/',['电子邮件' => $ username,'密码' => $密码]);
对API的调用我已经投入了另一项服务(ApiService)。
第一个问题是我如何才能不依赖ApiService?我的服务取决于另一个 第二个问题是如何将api数据与此LoginService中的db数据混合使用?将模型注入工厂并在服务中调用它是最佳做法吗?
我脑子里的流动应该是这样的: LoginController - > LoginService - > API调用 - > LoginService - > DB - > LoginService - > LoginController - >观点或其他。
我知道通过API登录不是最佳做法,因为我没有使用授权框架,但目前只需调用端点并获得完整的json即可。
谢谢你的答案。
答案 0 :(得分: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;
}
}
您还需要向服务管理器注册该类,并创建一个服务工厂来注入依赖项。