超薄v2到超薄v3升级

时间:2016-04-18 10:30:50

标签: php instance upgrade slim

我一直在使用Slim v2作为我的API,我正在考虑升级到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中做到这一点吗? 我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

在Slim3中,return $response(返回Response对象)是停止app的更好方法 那下面怎么样?

$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;
}

希望它会对你有所帮助。