Я только начал пытаться изучать AngularJS и пытаюсь заставить работать простое приложение, которое просто отображает и обновляет элементы из базы данных MySQL.
У меня есть PHP rest API, который обрабатывает запросы из приложения.
Пока что API успешно передает все элементы базы данных в JSON-кодированном массиве. Он также передает одну запись, но я не могу получить ее, чтобы обновить запись.
Я не вижу, как измененные данные передаются из приложения в API, когда я нажимаю кнопку сохранения в форме. Он должен передаваться как переменные $ _POST?
Вот код JS, который у меня есть в приложении:
angular.module('starter.services', []).factory('List', function ($resource) {
return $resource('http://example.com/restAPI/:id', { id: '@id' }, {
update: {
method: 'PUT'
}
});
});
angular.module('starter', ['ionic', 'ngResource', 'starter.controllers', 'starter.services'])
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('list', {
url: '/',
templateUrl: 'templates/list.html',
controller: 'ListController'
})
.state('editItem', {
url: '/items/:id/edit',
templateUrl: 'templates/item-edit.html',
controller: 'EditController'
})
$urlRouterProvider.otherwise('/');
});
angular.module('starter.controllers', [])
.controller('ListController', function ($scope, $state, $stateParams, List) {
$scope.items = List.query();
})
.controller('EditController', function ($scope, $state, $stateParams, List) {
$scope.updateItem=function(){
$scope.item.$update(function(){
$state.go('list');
});
};
$scope.loadItem=function(){
$scope.item=List.get({id:$stateParams.id});
};
$scope.loadItem();
});
Вот код формы:
<form class="form-horizontal" role="form" ng-submit="updateItem()">
<div class="form-group">
<label for="title" class="col-sm-2 control-label">Title</label>
<div class="col-sm-10">
<input type="text" ng-model="item.title" class="form-control" id="title" placeholder="Title Here"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" value="Save"/>
</div>
</div>
</form>
Когда приложение загружается, начальное состояние — «список», и все элементы из базы данных видны на странице.
Каждый элемент в списке имеет кнопку редактирования. Когда я нажимаю кнопку редактирования, состояние изменяется на «editItem», и новая страница загружается с одним элементом. Все идет нормально.
Когда я изменяю данные и нажимаю кнопку сохранения, вызывается функция updateItem с ng-submit="updateItem()"
,
Это вызывает API, но я не вижу, как он передает обновленные данные. Когда я пытаюсь error_log($_POST["title"]);
в API я вижу «Уведомление PHP: неопределенный индекс: заголовок» в журнале ошибок. Как получить доступ к измененным данным в API, чтобы я мог обновить базу данных?
Это тот .htaccess, который я использую — может ли это быть проблемой? Это тот, который я нашел в интернете, поэтому я очень мало знаю о том, как он работает.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?id=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
Спасибо за ответы, ребята.
@georgeawg — ты поставил меня на правильный путь. Раньше я использовал только GET и POST, тогда как метод обновления использует PUT, как вы указали.
Как только я понял это, я нашел ответ здесь …
Данные запроса REST не могут быть прочитаны методом put
Этот код — то, что работает для меня ….
$data = json_decode(file_get_contents("php://input"), true);
error_log($data['title']);
Других решений пока нет …