1

ここでの理解またはコードに何かが欠けています...

カテゴリを一覧表示/追加/編集/削除するための非常に基本的な CRUD アプリがあり、テーブルの主キーを「id」として定義すると正常に動作しますが、データベース列の名前を「categoryId」に変更すると、 PUT url にキー値が含まれておらず、処理されていないパスの 404 エラーが発生します...

スタック:

IIS 7.5 と RESTful サービス用の Slim PHP

// Route excerpt
...
          when('/categories',       {templateUrl: 'partials/categoryList.html',   controller: CategoryListCtrl}).
          when('/categories/new',   {templateUrl: 'partials/categoryDetail.html', controller: CategoryNewCtrl}).
          when('/categories/:id',   {templateUrl: 'partials/categoryDetail.html', controller: CategoryEditCtrl}).
...

angular.module('myServices', ['ngResource']) 
.factory('Category', function($resource){ 
    return $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
        { update: {method:'PUT' } } 
     ); 
})




// WORKS when attribute is 'id'
.factory('Category', function($resource){
        return $resource('../api/index.php/categories/:id', {id:'@id'}, 
            { update: {method:'PUT' } }
        );
    })


// FAILS with 404 when attribute is 'categoryId'
.factory('Category', function($resource){
        return $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
            { update: {method:'PUT' } }
        );
    })

もちろん、名前が変更されたコードには他にも多くの場所がありますが、私が見ている効果は ngResource に関連しているようです。

最初の方法は、機能する URL を生成します...

 categories/1?description=null&name=Observation&report=null
/api/index.php

2番目はこれを生成します...

 categories?categoryId=1&description=null&name=Observation&report=null
/api/index.php

パスの形式が正しくないため、404 エラーが発生します。

名前を変更した属性を URL で使用するために必要な別のパラメーター (またはディレクティブなど) はありますか?

4

1 に答える 1

1

2 番目のリソースで put をテストしたところ、期待どおりに動作しました。これを再現できる唯一の方法は、PUT ではなく GET を発行することでした。このデモを開いてネットワーク タブ (chrome/etc) を表示すると、put が何を生成し、get が何を生成するかを確認できます。

http://plnkr.co/edit/tI9KpqDp49pXuJJVjivm?p=preview

GET は、クエリ文字列のパラメーター化されたデータを生成します。

GET は以下を生成します。

Request URL:http://run.plnkr.co/api/index.php/categories?categoryId=123
Request Method:GET

PUT は以下を生成します。

Request URL:http://run.plnkr.co/api/index.php/categories/123
Request Method:PUT

コード:

   var test= $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
        { update: {method:'PUT' } }
    );

     var test2= $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
        { get: {method:'GET' } }
    );

    test.update({categoryId:123});
    test2.get({categoryId:123});
于 2013-05-13T22:48:47.557 に答える