我正在为我的角应用程序制作API,这将允许我使用Slim访问我的数据库。我按照本教程http://anjanawijesundara.blogspot.ca/2015/04/crud-application-with-angularjs.html
进行了操作我有一个'Angularjs'文件夹。在其中,我有我的index.html文件,我的'api'文件夹,这是这个API,我的'app'文件夹,用于角应用程序,以及'assets'文件夹,用于css,img和其他js文件。
我在带有composer的'API'文件夹中安装了Slim(它创建了一个供应商文件夹),并且我在vendor文件夹旁边有一个'index.php'文件。
我的'index.php'文件(在api文件夹中)到目前为止看起来像这样:
<?php
require 'vendor/autoload.php';
$app = new \Slim\App;
$app->get('/Types', 'getTypes');
$app->get('/Types/:id', 'getTypeById');
$app->run();
function DB_Connection() {
$dbhost = "localhost";
$dbuser = "kevdug_portfolio";
$dbpass = "*****************";
$dbname = "portfolio";
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}
function getTypes() {
$sql = "select * FROM pt_type";
try {
$db = DB_Connection();
$stmt = $db->query($sql);
$list = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($list);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
function getTypeById($id) {
$sql = "select * FROM pt_type WHERE id=".$id;
try {
$db = DB_Connection();
$stmt = $db->query($sql);
$list = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($list);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
?>
我想我可以在这段代码中使用我的API:
angular.module('appDatabaseCtrl', [])
.controller('databaseCtrl', ['$scope','$routeParams', '$http', '$log',
function($scope, $routeParams, $http, $log){
$scope.testDatabaseTypes = function(){
$http.get('/api/Types').success(function(data) {
$log.info("succes!");
$log.log(data);
})
.error(function (data, status){
$log.error("error!");
$log.log(data);
});
};
$scope.testDatabaseTypesById = function(){
console.log($scope.id);
$http.get('/api/Types/' + $scope.id).success(function(data) {
$log.info("succes!");
$log.log(data);
})
.error(function (data, status){
$log.error("error!");
$log.log(data);
});
};
}
]);
第一个函数有效,但第二个函数返回404错误。您可以通过这些树网址查看自己发生了什么:
http://kevdug.webfactional.com/#/database
http://kevdug.webfactional.com/api/types
http://kevdug.webfactional.com/api/types/1&lt; ---可以是1到4之间的任何id
答案 0 :(得分:0)
您似乎正在使用Slim v3(由$app = new \Slim\App;
判断),但您的路线格式似乎是Slim v2的格式。
$app->get('/Types/:id', 'getTypeById');
实际上应该更像$app->get('/Types/{id}', getTypeById);
。您还可以对其接受的内容提供限制$app->get('/Types/{id:\d+}', getTypeById);
编辑:您还在使用Slim v3的无效功能签名,这就是导航到Your Example Url with the literal :id
instead of a number it errors时的原因。你应该使用像
function getTypeById(\Slim\Http\Request $req, \Slim\Http\Response $res, $args) {
$id = $args["id"]; // Rest of your code
}
最后,我建议查找一些基本的SQL注入保护教程,因为如果您当前的/ Types /:id路由正常工作,那么它将具有SQL注入漏洞。但是,由于这不是这个问题的目标,我只是留下警告。