Slim v2 到 Slim v3 升级

Slim v2 to Slim v3 Upgrade

我一直在为我的 API 使用 Slim v2,并且正在考虑升级到 v3。 不幸的是,我的经验有限,可以在下面的代码示例中使用您的帮助。

这是登录码:

$app->post('/register', function() use ($app) {
        // check for required params
        verifyRequiredParams(array('name', 'email', 'password'));

        $response = array();

        // reading post params
        $name = $app->request->post('name');
        $email = $app->request->post('email');
        $password = $app->request->post('password');

        // validating email address
        validateEmail($email);

        $db = new DbHandler();
        $res = $db->createUser($name, $email, $password);

        if ($res == USER_CREATED_SUCCESSFULLY) {
            $response["error"] = false;
            $response["message"] = "You are successfully registered";
        } else if ($res == USER_CREATE_FAILED) {
            $response["error"] = true;
            $response["message"] = "Oops! An error occurred while registereing";
        } else if ($res == USER_ALREADY_EXISTED) {
            $response["error"] = true;
            $response["message"] = "Sorry, this email already existed";
        }
        // echo json response
        echoRespnse(201, $response);
    });

这是 validateEmail 函数:

function validateEmail($email) {
$app = \Slim\Slim::getInstance();
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $response["error"] = true;
    $response["message"] = 'Email address is not valid';
    echoRespnse(400, $response);
    $app->stop();
}

}

如何在 Slim v3 中获取应用程序实例以在不满足输入条件时实际停止应用程序? 如果你能在我的代码的帮助下给我一个例子,我将不胜感激。

感谢您的帮助!

编辑

以上问题已解决。不幸的是,在检查我的代码后出现了一个新问题。

我有一个中间层来验证用户:

function authenticate(\Slim\Route $route) {
// Getting request headers
$headers = apache_request_headers();
$response = array();
$app = \Slim\Slim::getInstance();

// Verifying Authorization Header
if (isset($headers['Authorization'])) {
    //omitted code
} else {
    // api key is missing in header
    $response["error"] = true;
    $response["message"] = "Api key is misssing";
    echoRespnse(400, $response);
    $app->stop();
}

在我的主要代码中,我按如下方式实现了身份验证功能:

$app->get('/tasks', 'authenticate', function() {
        global $user_id;
        $response = array();
        $db = new DbHandler();

       //ommit some code

        echoRespnse(200, $response);
    });

您知道如何在 Slim v3 中执行此操作吗? 非常感谢您的帮助。

在 Slim3 中,return $response(return 响应对象)是停止应用程序的更好方法。
那么下面怎么样呢?

$app->post('/register', function($request, $response, $args) {
    // omit some codes
    if(!validateEmail($request->getParsedBodyParam('email'))){
        return $response->withJson(['message' => 'Email address is not valid', 'error' => true], 400);   
    }
    // omit some codes
}

validateEmail 函数更改为如下所示。

function validateEmail($email) {

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return false
    }
    return true;
}

希望对您有所帮助。