2016-06-20 2 views
2

Я просто установил тонкий композитор, и я пытаюсь создать простой REST API.Slim 3 Framework - Fatal Error on setStatus

Мой текущий код выглядит следующим образом:

require 'vendor/autoload.php'; 

$app = new \Slim\App(); 

$app->get('/getPoiInitialList', function ($request, $response, $args) { 

//$app = \Slim\Slim::getInstance(); 
$app = new \Slim\App(); 

try 
{ 
    $db = getDB(); 

    $sth = $db->prepare("SELECT * FROM wikivoyage_pois LIMIT 50"); 
    $sth->execute(); 

    $poiList = $sth->fetchAll(PDO::FETCH_OBJ); 

    if($poiList) { 
     $app->response->setStatus(200); 
     $app->response()->headers->set('Content-Type', 'application/json'); 
     echo json_encode($poiList); 
     $db = null; 
    } else { 
     throw new PDOException('No records found.'); 
    } 

} catch(PDOException $e) { 
    $app->response()->setStatus(404); 
    echo '{"error":{"text":'. $e->getMessage() .'}}'; 
} 

}); 

// Run app 
$app->run(); 

У меня были некоторые Слим не нашли ошибки, которые я был в состоянии пройти, но теперь я получаю следующее сообщение Fatal Error и извещение, когда я пытаюсь получить доступ к конечной точки в моем браузере:

Notice: Undefined property: Slim\App::$response in C:\xampp\htdocs\api\index.php on line 47 - the first setStatus 

и

Fatal error: Call to a member function setStatus() on null in C:\xampp\htdocs\api\index.php on line 47 

на одной и той же линии. Любая идея о том, что здесь может быть неправильным?

ответ

1

Не могли бы вы попытаться использовать следующий код?

Подробности

  • Вы $app = new \Slim\App(); дважды. Это не правильно.
  • Вам не нужна переменная $app внутри вашего кода. Переменная $response имеет экземпляр объекта Response.

PHP

require 'vendor/autoload.php'; 
$app = new \Slim\App(); 
$app->get('/getPoiInitialList', function ($request, $response, $args) { 
    try 
    { 
     $db = getDB(); 

     $sth = $db->prepare("SELECT * FROM wikivoyage_pois LIMIT 50"); 

     $sth->execute(); 
     $poiList = $sth->fetchAll(PDO::FETCH_OBJ); 

     if($poiList) { 

      $response->setStatus(200); 
      $response->headers->set('Content-Type', 'application/json'); 
      echo json_encode($poiList); 
      $db = null; 

     } else { 
      throw new PDOException('No records found.'); 
     } 

    } catch(PDOException $e) { 
     $response->setStatus(404); 
     echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    } 

}); 

// Run app 
$app->run(); 
+0

С вашего кода, я ликвидировал Обратите внимание, но я все еще получаю Фатальная ошибка: Вызов undefined method Slim \ Http \ Response :: setStatus(). –

+0

Клаудио, пожалуйста, измените код $ app-> response() -> setStatus (404); $ app-> response-> setStatus (404); –

+0

http://docs.slimframework.com/response/status/ –

0

С Слим 3 вы не будете называть $response->setStatus(200); больше. Как Valdek уже упомянутый статус 200 по умолчанию, поэтому нет необходимости устанавливать его снова.

Чтобы вернуть другой код состояния (например, в вашей отрасли улова), вы должны использовать метод withStatus:

require 'vendor/autoload.php'; 
$app = new \Slim\App(); 
$app->get('/getPoiInitialList', function ($request, $response, $args) { 
    try 
    { 
     [...] 
    } catch(PDOException $e) { 
     return $response->withStatus(404, $e->getMessage()); 
    } 
}); 

// Run app 
$app->run();