Backbone.jsモデルを作成し、MySqlデータベースにインスタンスを保存したいと思います。
var Website = Backbone.Model.extend({
defaults: {
"title":"default title"
},
urlRoot : './websites'
});
var website = new Website();
website.save();
Slim.phpを使用して、データベースにRestfulAPIを作成しています。これがwebsites\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 / websiteリクエスト方法:POSTステータスコード:301恒久的に移動
次に、2番目のhttpリクエストが送信されます。
リクエストURL:localhost / SAMPLE-CODES / backbone.js-mysql-reading-json / website /リクエスト方法:GETステータスコード:404見つかりません
私の質問は、このリクエストが「addWebsite」関数の呼び出しをトリガーしないのはなぜですか?2番目のhttpリクエストはGETであることがわかりますが、それはPOSTである必要がありますが、それでもそのためのルートがあります...
私はフォルダ/websites/を持っています
また、スリムルーティングのドキュメントに従って.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()を呼び出すと、httpPOSTがトリガーされます。
localhost / SAMPLE-CODES / backbone-mysql-reading-json / website
。
これは、応答ヘッダーが言う「301MovedPermanently」を取得します。
localhost / SAMPLE-CODES / backbone-mysql-reading-json / website /
。
これはSlimが推奨する.htaccess設定によるものだと思います。
質問:この「301を永続的に移動」しても大丈夫ですか、それともここですでに問題が発生していますか?
次に、2番目のhttpGETtoが表示されます
localhost / SAMPLE-CODES / backbone-mysql-reading-json / website /
更新:
私はまだ301を取得しています
localhost / SAMPLE-CODES / backbone-mysql-reading-json / website
、次にGET to
localhost / SAMPLE-CODES / backbone-mysql-reading-json / website /
この2番目のリクエストはブラウザで機能し、
[{"id": "1"、 "title": "titre site 1"}、{"id": "2"、 "title": "titre site 2"}]
これがすべてのレコードの応答になりますが、1つのレコードを保存したかったのです。リダイレクト301が間違っているようです。
Slimが一致するルートを見つけられなかったことが原因だと思います(Slim_Exception_RequestSlashは301をトリガーします)。
しかし、なぜ私のSlimスクリプトがルートを見つけられないのですか?
のリクエスト
localhost / SAMPLE-CODES / backbone-mysql-reading-json / website
一致するもの:
$ app-> post('/ website'、function(){