Как исправить ошибку «Класс ‘App Db \ Database’ не найден» на slim framework

#php #slim

#php #slim

Вопрос:

Я пытаюсь вызвать API с помощью postman из проекта, который я загрузил онлайн (общий хостинг cpanel), но продолжал получать эту ошибку:

 {
"statusCode": 500,
"error": {
    "type": "SERVER_ERROR",
    "description": "Class 'App\Db\Database' not found"
   }
}
  

Вот мой контроллер, пытающийся протестировать API входа в систему, когда я делаю запрос:

 namespace AppControllers;

use AppDbDatabase;
use FirebaseJWTJWT;
use RespectValidationExceptionsNestedValidationException;
use SlimPsr7Response;
use RespectValidationValidator as v;

class LoginController
{
public function __construct($data, Response $response)
{
    $validator = v::keySet(
        v::key('username', v::stringType()->notEmpty()->setName('username')->length(2, 100)),
        v::key('password', v::stringType()->notEmpty()->setName('password'))
    );

    try {
        $validator->assert($data);
    } catch (NestedValidationException $e) {
        $response->getBody()->write(json_encode([
            'responseCode' => "13",
            'responseMessage' => $e->getMessages(),
        ]));
        return $response->withHeader('Content-Type', 'application/json');
    }

    $username = $data['username'];
    $password = $data['password'];

    $hash_pwd = password_hash($password, PASSWORD_DEFAULT);
    $db = Database::getInstance();

    $login_query =
        $db->select(
            'users',
            [
                'email_address',
                'passwords'
            ],
            [
                'email_address' => $username,
            ]
        );

    if (!$login_query) {
        $response->getBody()->write(json_encode([
            'responseCode' => '99',
            'responseMessage' => "Invalid Login Details"
        ]));
    } else {
        $user_hash_pwd = $login_query[0]['passwords'];
        $password_verify = password_verify($password, $user_hash_pwd);
        if ($password_verify) {
            $key = "!@#$%^amp;*()_ ";
            $payload = array(
                "iss" => "http://localhost",
                "aud" => "http://localhost",
                'iat' => time(),
                'uid' => 1,
                'exp' => time()   10,
            );
            $token = JWT::encode($payload, $key);
            $decoded = JWT::decode($token, $key, array('HS256'));


            $response->getBody()->write(json_encode([
                'responseCode' => '0',
                'responseMessage' => "Logged In",
                'responseBody' => [
                    'token' => $token
                ]
            ]));
        } else {
            $response->getBody()->write(json_encode([
                'responseCode' => '99',
                'responseMessage' => "Incorrect password"
            ]));
        }
    }
 }
  

}

Конечная точка — api / v1 / login. Хотя данные о подключении к базе данных верны, а также пространство имен. Пожалуйста, как я могу это исправить?

Комментарии:

1. Не знаком со Slim, но вы даже определили AppDbDatabase класс?

2. Да, я сделал @Jeto

3. Тогда, пожалуйста, поделитесь его определением пространства имен и местоположением папки.

4. Определение пространства имен: пространство имен App Db; расположение: public_html / api / src / Model / Database (на cpanel)

5. Я предполагаю, что Slim использует автозагрузку PSR-4, что означает, что ваш класс должен быть в .../src/App/Db папке вместо этого.