2016-07-08 10 views
1

Ich versuche, eine Route mit PHP Slim-Framework zu erstellen.In PHP Slim Framework eine bestimmte Route kann nicht in "s" enden oder es wirft einen Fehler 500 Server

<?php 
$app->get('/bands', function() { 
    $response["test"] = 'tester'; 
    echoResponse(200, $response); 
}); 

Immer wenn ich diesen Weg nenne ich bekommen einen 500-Server-Fehler und meine PHP-Protokoll besagt, dass $app null ist. Aber wenn ich die Route zu ändern:

<?php 
$app->get('/band', function() { 
    $response["test"] = 'tester'; 
    echoResponse(200, $response); 
}); 

Alles funktioniert, wie es sollte. Es gibt etwas über das "s" in der Bandroute. Ich kann einfach kein 's' on band machen, um Bands zu machen.

UPDATE: Keine der Routen mit einem 's' am Ende funktioniert!

Ich verstehe einfach nicht, warum das passiert. Jede Hilfe würde sehr geschätzt werden.

Wenn Sie sich fragen, was echoResponse(200,$response); tut, nimmt es nur das Array und gibt es als JSON-Objekt mit der HTTP-Antwort 200 Success an den Browser zurück. Dieses es, wie es aussieht:

function echoResponse($status_code, $response) { 
    $app = \Slim\Slim::getInstance(); 
    // Http response code 
    $app->status($status_code); 

    // setting response content type to json 
    $app->contentType('application/json'); 

    echo json_encode($response); 
} 

Hier ist meine index.php:

<?php 
require 'libs/Slim/Slim.php'; 

\Slim\Slim::registerAutoloader(); 

$app = new \Slim\Slim(); 

// The separate files that serve the routes 
require_once 'bands.php'; 
require_once 'users.php'; 
require_once 'instructors.php'; 
require_once 'musicians.php'; 

function echoResponse($status_code, $response) { 
    $app = \Slim\Slim::getInstance(); 
    // Http response code 
    $app->status($status_code); 

    // setting response content type to json 
    $app->contentType('application/json'); 

    echo json_encode($response); 
} 

$app->run(); 

Dann in den oben genannten erforderlichen Dateien enthalten meine Routen:

Bands:

<?php 
$app->get('/bands', function() { 
    $response["test"] = 'tester'; 
    echoResponse(200, $response); 
}); 

Benutzer:

<?php 
$app->get('/users', function() { 
    $response["test"] = 'tester'; 
    echoResponse(200, $response); 
}); 

Musiker:

<?php 
$app->get('/musicians', function() { 
    $response["test"] = 'tester'; 
    echoResponse(200, $response); 
}); 

Instructors:

<?php 
$app->get('/instructors', function() { 
    $response["test"] = 'tester'; 
    echoResponse(200, $response); 
}); 

Alle der oben genannten Strecken funktionieren, wenn ich den abschließenden 's' zu entfernen.

Wenn es hilft. Hier ist mein .htaccess:

+0

Welche Version von Slim? – Progrock

+0

Ich benutze Slim 2.3.5 – OGZCoder

+0

Was ist Ihre 'echoResponse' Funktion, können wir es sehen? Irgendwelche anderen Wege? – Progrock

Antwort

1

Apache ist der Schuldige hier, das ist nicht Slim-bezogen. Sie haben Multiviews aktiviert und der Webserver stimmt mit den PHP-Dateien (bands.php) überein. Die Anfrage erreicht niemals Slim.

Um Ihre Routen arbeiten, fügen Sie diese Zeile zu Beginn Ihrer .htaccess-Datei zu erhalten:

Options -Multiviews 

Zur weiteren Erläuterung auf das, was geschieht, einen Ausschnitt aus Apache docs:

Die Wirkung MultiViews ist wie folgt: Wenn der Server eine Anfrage für/einige/dir/foo empfängt, wenn/einige/dir MultiViews aktiviert hat und /einige/dir/foo nicht existiert, dann liest der Server das Verzeichnis auf der Suche nach Dateien mit dem Namen f oo.* und fälscht effektiv eine Typenkarte , die all diese Dateien benennt und ihnen die gleichen Medientypen und Inhaltscodierungen zuweist, die es hätte, wenn der Kunde nach einem der Namen nach ihnen gefragt hätte. Es wählt dann die beste Übereinstimmung mit den Anforderungen des Kunden .

+0

Yup, das war es! – OGZCoder