2015-11-20 4 views
0

Я работаю над API SLIM, используя slimframework версию 3.0 RC2.Ошибка Slim Framework 405, когда методы POST, PUT, DELETE

Я настроил .htaccess как рекомендовано и также определил конечные точки. При извлечении с помощью метода GET я получаю надлежащий ответ 200 и запрошенные данные правильно развернуты.

Однако при использовании любого из POST, PUT или DELETE методы, просто получить сообщение с об ошибке, в котором говорится:

Если Слим Framework приложение имеет маршрут, который соответствует текущий запрос HTTP URI но НЕ метод HTTP-запроса, приложение вызывает обработчик Not Allowed и возвращает HTTP-сообщение HTTP/1.1 405 не разрешенному HTTP-клиенту.

Это POST конечная точка, что я тестирование:

$app->post('/add', function() {                     
    echo "post ok";                    
}); 

Как упоминалось ранее, при использовании GET, он отлично работает даже с помощью аргументов.

Мой сервер - это Linux debian jessie, версия PHP 5.6.15. На самом деле я тестирую URI в браузере, а также используя Postman. Оба дают мне ошибку 405 для любого из POST, PUT DELETE.

+0

Как вы создаете запрос к '/ add' конечной точки? Можете ли вы добавить свои заголовки? –

ответ

0

Я нашел путь. Вместо того чтобы использовать пост, как это:

$app->post('/add', function() {           
    echo "post ok"; 
}); 

Использование Js карта:

$app->map(['GET', 'POST']'/add', function() {           
    echo "post ok"; 
}); 

Заменить метод POST для любого другого PUT, DELETE, PATCH ..... Я проверил с DataBase и работает нормально, как ожидалось.

Также имейте в виду, что вы можете или должны требовать функции аргументы:

function($request, $response, $args) 
0

Вам нужно конкретно использовать метод post, или поместить или удалить в зависимости от того, что вам нужно. Это из документов.

$app = new \Slim\App(); 
$app->post('/books', function ($request, $response, $args) { 
    // Create new book 
}); 

Вы не можете использовать $ app-> получить запрос на отправку.

EDIT:

Дважды проверьте файл Htaccess, а также и убедитесь, что его получил:

RewriteEngine On 

# Some hosts may require you to use the `RewriteBase` directive. 
# If you need to use the `RewriteBase` directive, it should be the 
# absolute physical path to the directory that contains this htaccess file. 
# 
# RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 
+0

Это была опечатка, на самом деле при использовании сообщения я получаю ошибку 405 при использовании get, всего 200. – datelligence

+0

@datelligent Вы действительно уверены, что отправляете сообщение в нужное место? –

+0

Да, даже если вместо сообщения я перехожу, чтобы получить, в приведенном выше примере, я получаю 200 и правильно эхо. Но когда я перехожу на пост, получите ошибку 405. – datelligence

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