Я создал модель Backbone.js и хочу сохранить экземпляр в моей базе данных MySql.
var Website = Backbone.Model.extend({
defaults: {
"title":"default title"
},
urlRoot : './websites'
});
var website = new Website();
website.save();
Я использую Slim.php для создания Restful API для моей базы данных. Вот начало сайта\index.php:
<?php
require 'Slim/Slim.php';
$app = new Slim();
$app->get('/websites', 'getWebsites');
$app->get('/websites/:id', 'getWebsite');
$app->post('/websites', 'addWebsite');
$app->put('/websites/:id', 'updateWebsite');
$app->delete('/websites/:id', 'deleteWebsite');
$app->run();
Мой save () запускает POST, который «перемещается навсегда»:
URL-адрес запроса: localhost/SAMPLE-CODES/backbone.js-mysql-reading-json/websites Метод запроса: Код состояния POST: 301 Перемещено навсегда
Затем я вижу второй отправленный HTTP-запрос:
URL запроса: localhost/SAMPLE-CODES/backbone.js-mysql-reading-json/websites/ Метод запроса: GET Код состояния: 404 Not Found
Мой вопрос: почему этот запрос не вызывает вызов функции «addWebsite»? Я вижу, что второй http-запрос - это GET, хотя он должен быть POST, но даже тогда для этого есть маршрут...
У меня есть папка /сайты/
Я также установил .htaccess и http.conf в соответствии с документацией по тонкой маршрутизации. :
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
http.conf
<VirtualHost *:80>
<Directory "c:/xampp/htdocs/SAMPLE-CODES/backbone.js-mysql-reading-json/websites/">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Изменить:
Вызов model.save() запускает http POST для
localhost/ОБРАЗЦЫ-КОДЫ/магистраль-mysql-чтение-json/веб-сайты
.
Это получает «301 перемещено навсегда» с заголовком ответа:
localhost/ОБРАЗЦЫ-КОДЫ/магистраль-mysql-чтение-json/веб-сайты/
.
Я предполагаю, что это связано с рекомендованными Slim настройками .htaccess.
Вопрос: нормально ли, что "301 перемещен навсегда", или у меня уже есть проблема?
Затем я вижу 2-й http GET в
localhost/ОБРАЗЦЫ-КОДЫ/магистраль-mysql-чтение-json/веб-сайты/
Обновление:
Я все еще получаю 301 на
localhost/ОБРАЗЦЫ-КОДЫ/магистраль-mysql-чтение-json/веб-сайты
, затем ПОЛУЧИТЬ
localhost/ОБРАЗЦЫ-КОДЫ/магистраль-mysql-чтение-json/веб-сайты/
Этот второй запрос работает в браузере и возвращает
[{"id":"1","title":"титр сайта 1"},{"id":"2","title":"титр сайта 2"}]
Так что это был бы ответ для всех записей, но я хотел сохранить 1 запись. Кажется, что редирект 301 неверен.
У меня такое ощущение, что Slim не нашел подходящего маршрута (Slim_Exception_RequestSlash вызовет ошибку 301< /а>).
Но почему мой скрипт Slim не находит маршрут?
Запрос на
localhost/ОБРАЗЦЫ-КОДЫ/магистраль-mysql-чтение-json/веб-сайты
соответствует:
$app->post('/веб-сайты', function() {