【发布时间】:2012-09-04 11:17:54
【问题描述】:
我创建了一个 Backbone.js 模型并希望将一个实例保存到我的 MySql 数据库中。
var Website = Backbone.Model.extend({
defaults: {
"title":"default title"
},
urlRoot : './websites'
});
var website = new Website();
website.save();
我正在使用 Slim.php 为我的数据库创建一个 Restful API。这里是 website\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:
请求 网址:localhost/SAMPLE-CODES/backbone.js-mysql-reading-json/websites 请求方法:POST 状态码:301 永久移动
然后我看到发送了第二个 http 请求:
请求 网址:localhost/SAMPLE-CODES/backbone.js-mysql-reading-json/websites/ 请求方法:GET 状态码:404 Not Found
我的问题是:为什么这个请求没有触发对“addWebsite”函数的调用? 我看到第二个 http 请求是一个 GET,它应该是一个 POST,但即使这样,也有一个路由......
我有一个文件夹 /websites/
我还根据Slim routing documentation 设置了 .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/SAMPLE-CODES/backbone-mysql-reading-json/网站
.
这会得到一个“301 Moved Permanently”,响应头显示:
localhost/SAMPLE-CODES/backbone-mysql-reading-json/websites/
.
我认为这是由于 Slim 推荐的 .htaccess 设置。
问题:是否可以将此“301 永久移动”,还是我在这里已经遇到问题了?
然后我看到第二个 http GET 到
localhost/SAMPLE-CODES/backbone-mysql-reading-json/websites/
更新:
我仍然收到 301
localhost/SAMPLE-CODES/backbone-mysql-reading-json/网站
,然后是 GET 到
localhost/SAMPLE-CODES/backbone-mysql-reading-json/websites/
第二个请求在浏览器上运行并返回
[{"id":"1","title":"titre site 1"},{"id":"2","title":"titre site 2"}]
所以这将是所有记录的响应,但我想保存 1 条记录。 看来重定向301是错误的。
我感觉这是由于 Slim 没有找到匹配的路线 (Slim_Exception_RequestSlash would trigger a 301)。
但是为什么我的 Slim 脚本找不到路由呢?
请求
localhost/SAMPLE-CODES/backbone-mysql-reading-json/网站
匹配:
$app->post('/websites', function() {
【问题讨论】:
标签: .htaccess backbone.js slim