2016-04-18 5 views
1

Я использую Slim v2 для своих API и думаю об обновлении до версии v3. К сожалению, у меня ограниченный опыт и вы можете использовать свою помощь на примере кода ниже.Slim v2 to Slim 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(); 
} 

}

Как получить экземпляр приложения в тонкий 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); 
    }); 

ли вы знаете, как сделать это в тонком v3? Буду признателен за вашу помощь.

ответ

1

В Slim3, return $response (return Response object) - лучший способ остановить приложение.
Так как же ниже?

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

Надеюсь, это поможет вам.

+0

Благодарим вас за ответ. Это хороший обход проблемы, с которой я столкнулся. Очень ценится. К сожалению, возник новый вопрос. Я отредактировал вышеупомянутый вопрос, потому что этот вопрос был решен. – Stefan

+0

В slim3 вы можете использовать промежуточное программное обеспечение. Pls взглянуть на следующую ссылку. http://www.slimframework.com/docs/concepts/middleware.html – wtadahiro

+0

И вы можете получить заголовок из объекта $ request. '$ Request-> getHeaders(); ' – wtadahiro

Смежные вопросы