AngularJS - metoda PUT nie działa (błąd 404)
Jestem nowym użytkownikiem AngularJS i mam problem z aktualizacją obiektu poprzez REST. Używam Backend PHP / Mysql (Slim Framework).
Jestem w stanie pobrać (GET), utworzyć (POST) nowy obiekt, ale nie edytować (PUT) jednego. Oto kod:
moja forma:
<form name="actionForm" novalidate ng-submit="submitAction();">
Name: <input type="text" ng-model="action.name" name="name" required>
<input type="submit">
</form>
Moja usługa:
var AppServices = angular.module('AppServices', ['ngResource'])
AppServices.factory('appFactory', function($resource) {
return $resource('/api/main/actions/:actionid', {}, {
'update': { method: 'PUT'},
});
});
app.js
var app = angular.module('app', ['AppServices'])
app.config(function($routeProvider) {
$routeProvider.when('/main/actions', {
templateUrl: 'partials/main.html',
controller: 'ActionListCtrl'
});
$routeProvider.when('/main/actions/:actionid', {
templateUrl: 'partials/main.html',
controller: 'ActionDetailCtrl'
});
$routeProvider.otherwise({redirectTo: '/main/actions'});
});
controllers.js:
function ActionDetailCtrl($scope, $routeParams, appFactory, $location) {
$scope.action = appFactory.get({actionid: $routeParams.actionid});
$scope.addAction = function() {
$location.path("/main/actions/new");
}
$scope.submitAction = function() {
// UPDATE CASE
if ($scope.action.actionid > 0) {
$scope.action = appFactory.update($scope.action);
alert('Action "' + $scope.action.title + '" updated');
} else {
// CREATE CASE
$scope.action = appFactory.save($scope.action);
alert('Action "' + $scope.action.title + '" created');
}
$location.path("/main/actions");
}
}
W Slim w api / index.php mam zdefiniowane następujące trasy i funkcje:
$app->get('/main/actions', 'getActions');
$app->get('/main/actions/:actionid', 'getAction');
$app->post('/main/actions', 'addAction');
$app->put('/main/actions/:actionid', 'updateAction');
Kiedy tworzę nową „akcję”, wszystko działa zgodnie z oczekiwaniami. Ale gdy próbuję edytować istniejący, mam ten błąd:
POŁOŻYĆhttp: //project.local/api/main/actions 404 Nie Znaleziono
Akcja nie jest aktualizowana (chociaż wyświetlany jest komunikat ostrzegawczy „Akcja zaktualizowana xxx”)
Czy jest to problem z moim ustawieniem routeProvider? Domyślam się, że adres URL PUT pomija identyfikator na końcu ...
Dokładnie, jeśli spróbuję zasymulować żądanie PUT za pomocąRozszerzenie POSTMan-Chrome na przykład wszystko działa dobrze (PUThttp: //project.local/api/main/actions/3 zwraca oczekiwane dane)