2014-03-12 130 views
3

我一直在使用AngularJS,我試圖將我的應用程序連接到它。使用AngularJS和Slim進行路由PHP

到目前爲止,我已經使用Slim PHP,並且可以從MySql數據庫獲取所有記錄,但我無法獲取特定的記錄。我編寫了PHP代碼,可以導航到「../requests/#」並獲得正確ID記錄的JSON響應。我不能得到的是它與界面一起工作。使用下面的代碼,我可以創建一個請求列表,然後單擊我想要打開的viewRequest.html。然而,我的查看請求頁面總是帶來第一條記錄,而不是URL中的記錄。

斯利姆 - 的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工作也不能得到正確的記錄出現。

提前致謝!

+0

可以使用JS控制檯(鉻),看看你的前臺是實際發送到渺茫。很可能你發送的ajax請求的方法不正確,或者你發送的值不明確:id – amenadiel

+0

我仍然習慣了Chromes開發人員工具 - 我在哪裏可以看到這些信息? – Kent0111

+1

Kent0111您可以在Chrome調試工具的網絡選項卡中看到所有網絡流量,包括來自請求和響應的標題,以查看詳細信息(標題等),您必須單擊網絡選項卡中的特定行/請求,然後才能請參閱以不同方式顯示部分請求的面板,以便更輕鬆地找到您要查找的信息。我也使用同樣的技術堆棧,它對我來說工作非常好,所以我鼓勵你繼續前進。 Slim真的簡化了服務器端的東西,並讓我建立適當的課程等。 – shaunhusain

回答

0

嘿大家感謝輸入我能診斷問題!

使用chrome開發人員工具上的網絡選項卡我看到我的代碼發送單詞「id」而不是變量。

我現在通過簡單地將我的路由參數添加到資源字符串中來修改我的控制器。似乎現在工作很好!謝謝大家

app.js

app.controller('viewRequestController', function($scope, $location, $route, $routeParams, $resource) { 
     $scope.message = 'Pow!'; 
     $scope.header = 'View Change Request'; 

     var request_Id = $routeParams.id; 
     var Request = $resource(('http://pdgrosit02v/changeRequest/app/api/requests/'+ request_Id)); 

     $scope.request = Request.get(); 
}); 
2

我不是使用PHP,而是使用NodeJs。但是,這是我在使用AngularJs和後端進行路由時注意到的。

初始請求

當用戶的意志使你的應用程序的初始請求。它首先通過php邏輯。 (例如$app->get('/requests', 'getRequests'))。在我的情況下,PHP /後端這裏的工作是兩兩件事:

  • 從後端搜索引擎優化,僅目的獲取數據(最爬蟲不執行客戶端的js,所以你需要插入該數據發送給用戶之前)

  • 最重要的是,給你的角度應用程序的索引文件以及所有的JS。一旦用戶收到這些信息,Angular Bootstraps就可以開始了。

後續請求

一旦用戶加載了您的應用角度。服務器(php)不知道用戶如何在角度應用內導航。請記住,angular是客戶端,並嘗試減少對服務器的請求數量。當用戶導航到「(#)/ requests/1234」時,它將觸發.when('/requests/:id'路由,但不會觸發$app->get('/requests/:id', 'getRequest');。如果您想訪問從您的數據庫獲取數據的端點,則需要在角度內使用$http服務,並執行類似$http.get('requests/1234')這樣的操作,並以這種方式獲取數據。

讓我知道,如果這是不明確的,給予好評/接受,如果它是:)