2014-03-12 5 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 콘솔을 사용할 수 있습니다 app.js. 잘못된 방법으로 Ajax 요청을 보내거나 정의되지 않은 값을 다음과 같이 보내고 있습니다. id – amenadiel

+0

Chromes 개발자 도구에 익숙해 져 있는데 -이 정보는 어디서 볼 수 있습니까? – Kent0111

+1

Kent0111 Chrome 디버깅 도구의 네트워크 탭에서 요청 및 응답의 헤더를 비롯한 모든 네트워크 트래픽을 볼 수있어 네트워크 탭에서 특정 행/요청을 클릭해야만하는 세부 정보 (예 : 헤더 등)를 볼 수 있습니다. 원하는 정보를 쉽게 찾을 수 있도록 여러 가지 방법으로 레이아웃 된 패널을 참조하십시오. 또한 저는 같은 기술 스택을 사용하고 있으며 제게 정말 잘하고 있습니다. 앞으로 계속해서 격려해 주시기 바랍니다. Slim은 실제로 서버 측을 단순화하고 적절한 클래스 등을 만들 수있게 해줍니다. – shaunhusain

답변

0

안녕 모두의 덕분 경우

수락/upvote에,이 명확하지 알려줘!

크롬 개발자 도구의 네트워크 탭을 사용하여 내 코드가 "id"라는 단어와 변수가 아닌 것을 보았습니다.

이제 리소스 문자열에 내 경로 매개 변수를 추가하여 컨트롤러를 수정했습니다. 지금 큰 일을하고있는 것 같습니다! 주셔서 감사합니다 모든 사람이

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를 사용하지 않고 NodeJ를 사용하고 있습니다. 그러나 이것은 AngularJs와 백엔드에서 라우팅을 사용할 때 눈치 챘을 것입니다.

초기 요청

사용자의 의지 앱에 대한 초기 요청합니다. 그것은 먼저 PHP 로직을 거칩니다. (예 : $app->get('/requests', 'getRequests')). SEO 목적 전용을위한 백엔드에서

  • 가져 오기 데이터 (대부분의 크롤러가 클라이언트 JS 실행하지 않도록 삽입해야 내 경우에는 여기에 PHP/백 엔드의 작업은 두 가지입니다 그 데이터를 사용자에게 보내기 전의 데이터)

  • 가장 중요한 것은 모든 JS와 함께 각도 응용 프로그램의 색인 파일을 제공하는 것입니다. 일단 사용자가 그것을 받으면 Angular bootstraps와 you 're go to go.

후속 요청은 사용자가 귀하의 각도 응용 프로그램을로드되면

. 서버 (PHP) 은 각도 앱에서 사용자가 탐색하는 방법에 대해 아무것도 모릅니다. 각도는 클라이언트 쪽이며 서버에 대한 요청 수를 줄이려고합니다. 사용자가 "(#)/requests/1234"로 이동하면 경로가 실행되지만 $app->get('/requests/:id', 'getRequest'); 경로는 실행되지 않습니다. 데이터베이스에서 데이터를 가져 오는 엔드 포인트에 액세스하려면 각도 내에서 $http 서비스를 사용해야하며 $http.get('requests/1234')과 같은 방식으로 데이터를 가져와야합니다. 이 : 내가 문제를 진단 할 수 있었다 입력에 대한