【发布时间】:2014-04-16 23:45:06
【问题描述】:
我一直在使用 AngularJS,我正在尝试将我的应用程序连接到它。
到目前为止,我使用了 Slim PHP,可以从我的 MySql 数据库中获取所有记录,但我无法获取特定记录。我已经编写了 PHP 代码,可以导航到“../requests/#”并获得正确 ID 记录的 JSON 响应。我无法得到的是它与界面一起工作。使用下面的代码,我可以创建一个请求列表,然后单击我要打开 viewRequest.html 的请求。但是,我的查看请求页面总是显示第一条记录,而不是 URL 中的记录。
Slim - Index.PHP
<?php
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
use Slim\Slim;
$app = new Slim();
$app->get('/requests', 'getRequests');
$app->get('/requests/:id', 'getRequest');
$app->post('/add_request', 'addRequest');
$app->run();
function getRequests() {
$sql = "select * FROM change_request ORDER BY id";
try {
$db = getConnection();
$stmt = $db->query($sql);
$requests = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($requests);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
function getRequest($id) {
$sql = "SELECT * FROM change_request WHERE ID=$id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->execute();
$request = $stmt->fetchObject();
$db = null;
echo json_encode($request);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
?>
App.JS
var app = angular.module('changeControlApp', [
'ngRoute',
'ngResource'
]);
app.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/', {templateUrl: 'app/partials/requestList.html', controller: 'viewController' })
.when('/requests', {templateUrl: 'app/partials/requestList.html', controller: 'viewController' })
.when('/createRequest', {templateUrl: 'app/partials/viewRequests.html', controller: 'createRequestController' })
.when('/settings', {templateUrl: 'app/partials/settings.html', controller: 'settingsController'})
.when('/requests/:id', {templateUrl: 'app/partials/viewRequests.html', controller: 'viewRequestController' })
.otherwise({ redirectTo: '/' });
});
app.controller('mainController', function($scope) {
// create a message to display in our view
$scope.message = 'Everyone come and see how good I look!';
});
app.controller('viewRequestController', function($scope, $location, $route, $routeParams, $resource) {
$scope.message = 'Pow!';
$scope.header = 'View Change Request';
var request_Id = $routeParams.requestId;
var Request = $resource('http://pdgrosit02v/changeRequest/app/api/requests/id', { id: request_Id });
$scope.request = Request.get();
});
app.controller('viewController', function($resource, $scope, $location, $route) {
var Requests = $resource('http://pdgrosit02v/changeRequest/app/api/requests');
$scope.requests = Requests.query();
});
viewRequests.HTML
<div class="container-fluid" >
<form class="form-horizontal" role="form">
<div class="form-group">
<div class="text-center">
<h1>{{ header }}</h1>
<p>{{ message }}</p>
<p>{{ target }}</p>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Id:</label>
<div class="col-sm-4">
<input name="id" class="form-control" type="text" value="{{request.ID}}" disabled />
</div>
<label class="col-sm-2 control-label">Date:</label>
<div class="col-sm-4">
<input type="date" class="form-control" value="{{request.Date_Submitted}}" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Change Initiator:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{{ request.Change_Initiator }}" required/>
</div>
<label class="col-sm-2 control-label">Risk Level:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{{ request.Risk_Level }}" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">CI Details:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{{ request.Change_Initiator_id }}" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Requestor:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{{ request.Requestor }}" required/>
</div>
<label class="col-sm-2 control-label">Systems Affected:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{{ request. }}" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Implemented By:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{{ request. }}" required/>
</div>
<label class="col-sm-2 control-label">Implementation Date:</label>
<div class="col-sm-4">
<input type="date" class="form-control" value="{{ request. }}" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Close Date:</label>
<div class="col-sm-4">
<input type="date" class="form-control" value="{{ request. }}"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Work to be Performed:</label>
<div class="col-sm-4">
<textarea name="request.description" required>{{ request.Work_to_be_performed }}</textarea>
</div>
<label class="col-sm-2 control-label">Backout Plan:</label>
<div class="col-sm-4">
<textarea name="request.description" required>{{ request.Backout_Plan }}</textarea>
</div>
</div>
<div class="form-group">
<button class="edit" ng:click="editRequest()">Edit</button>
<button class="save" ng:click="saveRequest()">Save</button>
<button class="approve" ng:click="approveRequest()">Approve</button>
</div>
</form>
</div>
请帮忙,我快要搞定了,但我无法让 routeParams 工作,也无法让正确的记录出现。
提前致谢!
【问题讨论】:
-
您可以使用 js 控制台(在 chrome 中)查看您的前端实际发送给 slim 的内容。您可能使用错误的方法发送 ajax 请求,或者您发送的未定义值是 :id
-
我还在习惯 Chrome 开发者工具 - 我在哪里可以看到这些信息?
-
Kent0111 您可以在 Chrome 调试工具的网络选项卡中查看所有网络流量,包括来自请求和响应的标头,以查看您必须单击特定行/请求的详细信息(标头等)在网络选项卡中,然后将看到一个面板,该面板以不同的方式显示请求的部分内容,以便更轻松地找到您要查找的信息。我也使用相同的技术堆栈,它对我来说效果很好,所以我鼓励你继续前进。 Slim 真的简化了服务器端的事情,让我构建适当的类等。
-
另外我建议您查看 POSTman,它是一个 Chrome 插件,可以让您相对轻松地手动测试与前端分开的后端,理想情况下我会编写 PHPUnit 测试并端到端集成测试,但除此之外,这为您提供了一些方法来测试服务器端部分而不会弄乱 Angular 部分(当您不经常切换齿轮时,有时会更容易)
标签: php jquery mysql angularjs slim