0

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(){

4

2 に答える 2

1

私もSlimPHPを使用しており、あなたと同じように設定しています。

どのPHPを使用していますか?バージョン5.3以上を使用している場合、ルートを定義する方法は正しくありません。新しいPHPの場合は、次のことを試してください。

$app->get('/websites', function () {
    // your code to execute
});

あなたのセットアップに関する他のすべては私にはかなり普通に見えます。

于 2012-09-05T08:32:29.203 に答える
1

orangewarpとこの質問のおかげで問題は解決しました:

スラッシュ付きのフォルダ名への301リダイレクトを取得するのはなぜですか?

DirectorySlash Off解決策は、.htaccessを追加することでした。

更新された.htaccess(アプリがSlim.phpを呼び出す場所):

RewriteEngine On
DirectorySlash Off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
于 2012-09-07T06:25:39.760 に答える