sqlLoginRequest = $sqlLoginRequest; $this->loggerInterface = $loggerInterface; } public function fetchDatas(string $login): array { if (empty($login)) { throw new Exception('Connexion échouée, le login ne peut pas être vide'); } try { $dbh = $this->getConnection(); } catch (PDOException $e) { $this->loggerInterface->critical($e->getMessage()); throw new DatabaseConnectionException($e->getMessage()); } try { // forge de la requête $request = $this->sqlLoginRequest->getRequestScope(); } catch (NullDataToFetchException $e) { throw new DataToFetchConfigurationException($e->getMessage()); } try { // Préparation de la requête $query = $dbh->prepare($request); $query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]); $datas = $query->fetch(PDO::FETCH_ASSOC); $query->closeCursor(); } catch (PDOException $e) { $this->loggerInterface->critical($e->getMessage()); throw new DataToFetchConfigurationException($e->getMessage()); } if (false === $datas) { throw new Exception(sprintf('La requête sql "%s" a renvoyé un résultat incorrect.', $request)); } return $datas; } public function fetchPassword(string $login): array { try { $dbh = $this->getConnection(); } catch (PDOException $e) { $this->loggerInterface->critical($e->getMessage()); throw new DatabaseConnectionException($e->getMessage()); } // forge de la requête $request = $this->sqlLoginRequest->getRequestPassword(); try { $query = $dbh->prepare($request); $query->execute([$this->sqlLoginRequest->getLoginColumnName() => $login]); $password = $query->fetch(PDO::FETCH_ASSOC); $query->closeCursor(); } catch (PDOException $e) { $this->loggerInterface->critical($e->getMessage()); throw new LoginElementsConfigurationException($e->getMessage()); } if (!$password) { throw new Exception('Une erreur est survenue lors de la récupération des données'); } return [ $password[$this->sqlLoginRequest->getPasswordColumnName()], isset($password[$this->sqlLoginRequest->getSaltColumnName()]) ? $password[$this->sqlLoginRequest->getSaltColumnName()] : null, ]; } private function getConnection(): PDO { // Appel du singleton $sqlLogin = SQLLoginConnect::getInstance(); // Connection bdd return $sqlLogin->connect($this->sqlLoginRequest->getDatabaseDsn(), $this->sqlLoginRequest->getDbUser(), $this->sqlLoginRequest->getDbPassword()); } }