2016-06-20 10 views
2

Ich habe gerade schlank durch Composer installiert und ich versuche, eine einfache REST API zu erstellen.Slim 3 Framework - Schwerwiegender Fehler auf setStatus

Mein aktueller Code ist folgende:

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(); 

ich einige dünne hatte nicht gefunden Fehler, die ich passieren konnte, aber jetzt bin ich die folgende Fatal Error und Hinweis bekommen, wenn ich versuche, die für den Zugriff auf Endpunkt in meinem Browser:

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

und

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

auf der gleichen Linie. Irgendeine Idee, was hier falsch sein könnte?

Antwort

1

Können Sie den folgenden Code versuchen?

Einzelheiten

  • Sie haben $app = new \Slim\App(); zweimal. Es ist nicht richtig.
  • Sie brauchen nicht die Variable $app in Ihrem Code. Die Variable $response hat die Instanz zum Objekt 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

mit Ihrem Code, eliminiert ich die Mitteilung, aber ich bin immer noch Fatal error bekommen: Rufen Sie an undefinierte Methode Slim \ Http \ Response :: setStatus(). –

+0

Claudio, bitte, ändern Sie den Code $ app-> response() -> setStatus (404); zu $ app-> response-> setStatus (404); –

+0

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

0

mit dünnem 3 Sie $response->setStatus(200); nicht mehr nennen. Wie Valdek bereits erwähnten Status 200 ist die Standardeinstellung, so dass es nicht erneut festgelegt werden muss.

einen anderen Statuscode zurückzukehren (wie in Ihren Fang Zweig) können Sie die withStatus Methode verwenden:

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();