【问题标题】:Retrieving a GET command though Slim PHP & AngularJS通过 Slim PHP 和 AngularJS 检索 GET 命令
【发布时间】:2014-03-11 16:38:23
【问题描述】:

我最近开始使用 AngularJS 进行编程,但在尝试从我的数据存储区中提取特定数据行时遇到了问题。

我在运行 XAMPP 和 PHP 和 MySql 的服务器上有一个前端网页。我成功集成了 Slim PHP,并且在我转到 (localhost/requests) 时能够检索我所有数据的 JSON 列表

然而,我的问题是根据他们点击的 ID 获取特定记录。

这是我的前端部分代码,他们可以选择要打开的记录。

requestList.Html

    <table class="table table-hover">
    <thead>
        <tr>
            <th ng-repeat="header in headers">{{header}}</th>
            <th>Id</th>      
            <th>Date</th>      
            <th>Initiator</th>      
            <th>Detail</th>      
            <th>Requestor</th>         
            <th class="text-center">View</th>
            <th class="text-center">Edit</th>
            <th class="text-center">Delete</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="request in requests">
            <td>{{request.ID}}</td>
            <td>{{request.Date_Submitted}}</td>
            <td>{{request.Change_Initiator}}</td>
            <td>{{request.Change_Initiator_id}}</td>
            <td>{{request.Requestor}}</td>
            <td class="text-center">
                <a ng-href="/#/requests/:{{request.ID}}" class="glyphicon glyphicon-eye-open green"></a>
            </td>
            <td class="text-center">
                <a ng-href="request/edit/{{request.id}}" class="glyphicon glyphicon-pencil blue"></a>
            </td>
            <td class="text-center">
                <a ng-click="deleterequest(request.id)" class="glyphicon glyphicon-remove red"></a>
            </td>
        </tr>
    </tbody>
</table>

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>
            </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>

app.js

var app = angular.module('changeControlApp', [
    'ngRoute',
    'ngResource'
]);


app.config(function($routeProvider) {


    $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('viewRequestController', function($routeParams, $resource, $scope, $location, $window, $http) {
        $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();

});   

苗条 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->bindParam("id", $id);
        $stmt->execute();
        $request = $stmt->fetchObject();  
        $db = null;
        echo json_encode($request); 
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}

function getConnection() {
  $dbhost="pdgrosit02v";
  $dbuser="root";
  $dbpass="root";
  $dbname="pdgwebapps";
  $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  return $dbh;
}

当我导航到“/requests”时,我得到了 MySQL 表的完整 JSON 版本。但是,当我导航到“/requests/:1”时,我只会得到“false”

任何和所有的帮助都将不胜感激 - 我已经尝试了几天找到解决方案,但都没有找到!

编辑:

更新了 app.js

app.controller('viewRequestController', function($routeParams, $resource, $scope, $location, $window, $http) {
        $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();

});

编辑:

更新 index.php

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() .'}}'; 
    }
}

【问题讨论】:

    标签: php mysql angularjs restful-url angular-routing


    【解决方案1】:

    您的请求格式似乎不正确 - 请参阅 http://docs.slimframework.com/#Routing-Overview

    当您输入$app-&gt;get('/requests/:id', 'getRequest'); 时,冒号表示该路径段中的任何内容都将被视为名为“id”的参数。当你提出请求时,你不需要那个冒号。因此,您的请求应如下所示:http://foo.com/requests/3

    【讨论】:

    • 这非常有效,谢谢!对于任何试图让它工作的人,您还必须删除控制器中的 :

      Updated app.js controller

    【解决方案2】:

    根据文档(http://www.php.net/manual/en/pdostatement.fetchobject.php):

    The return value of this function on success depends on the fetch type. In all cases, FALSE is returned on failure.

    此外,根据此处http://www.php.net/manual/en/pdostatement.bindparam.php 文档中的示例,您应该使用:

    $sth->bindParam(':id', $id, PDO::PARAM_INT); //see ':' by id
    

    【讨论】:

    • 结合这 2 个以获得终极修复:P
    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 2015-08-13
    • 2013-06-12
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多