使用angularjs发布slim框架,即404?

时间:2017-02-28 08:40:22

标签: javascript php angularjs slim

我知道这是一个重复的问题,但我面临着使用slim framework webservices的angularjs的问题。

我创建了webservice来获取学生网址的记录,如:

http://www.slim.local/api/getstudent/1

苗条代码(网络服务):

//Get Single user
$app->get('/api/getstudent/{id}',function(Request $request, Response $response){
    $id = $request->getAttribute('id');

    $sql = "select * from student where id = $id";
    try{
        //Get object db
        $db = new db();
        //connect
        $db = $db->connect();
        $stmt = $db->query($sql);
        $student = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($student);
    }catch(PDOException $e){
        echo '{"Error":{"text":'.$e->getMessage().'}';
    }

});

上面的代码正在使用POSTMAN测试。

当我们尝试从angularjs中搜索相同的网址时,它会给出404错误,网址会像这样创建:GET http://www.slim.local/api/getstudent?id=2 404 Not Found

角度代码是:

RoutingApp = angular.module('RoutingApp', ['ngRoute']);

RoutingApp.config( [ '$routeProvider', '$locationProvider', function( $routeProvider, $locationProvider )
{
    $routeProvider
        .when('/home', {
            templateUrl: 'template/home.html',
            controller: 'homeController',
            controllerAs: "homeCtrl"
        })
        .when('/courses', {
            templateUrl: 'template/courses.html',
            controller: 'coursesController',
            controllerAs: "coursesCtrl"
        })
        .when('/students', {
            templateUrl: 'template/students.html',
            controller: 'studentsController',
            controllerAs: "studentsCtrl"
        }).when('/students/:id', {
        templateUrl: 'template/studentDetails.html',
        controller: 'studentDetailsController',
        controllerAs: "studentDetailsCtrl"
    })
        .otherwise({
            redirectTo: '/home',
        });
    $locationProvider.html5Mode(true);
} ] ).controller('studentDetailsController', function($http,$routeParams){
    var vm = this;
    $http({
        url: "http://www.slim.local/api/getstudent",
        params: {id:$routeParams.id},
        method: "get"
    }).then(function(response){
        vm.student = response.data;
    });
});

我们如何使用查询字符串将angularjs url与slim api url进行匹配?

2 个答案:

答案 0 :(得分:4)

只需更改创建http get请求的方式:

$http({
        url: "http://www.slim.local/api/getstudent/"+$routeParams.id,
        method: "get"
    })

这是因为你的苗条api服务于网址http://www.slim.local/api/getstudent/1而不是http://www.slim.local/api/getstudent?id=1

答案 1 :(得分:0)

你做错了方法

试试这个

$http({
    url: "http://www.slim.local/api/getstudent",
    params: {id:$routeParams.id},
    method: "get"
}).then(function(response){

$http({
     url: "http://www.slim.local/api/getstudent/" + $routeParams.id,
     method: "get"
}).then(function(response){

它给出404错误,因为在路线中你设置了路线参数

http://www.slim.local/api/getstudent/{id} //here id is route parameter  

并且您将作为get参数传递

http://www.slim.local/api/getstudent?id=2 //here id is $_GET parameter