我正在爲我的角應用程序製作一個API,這將允許我使用Slim訪問我的數據庫。我遵循本教程http://anjanawijesundara.blogspot.ca/2015/04/crud-application-with-angularjs.html我的Slim API給了我一個404錯誤頁面
我有一個'Angularjs'文件夾。其中,我有我的index.html文件,我的'api'文件夾,這個API在哪裏,'app'文件夾,角度應用程序和'assets'文件夾用於css,img和其他js文件。
我用Composer(它創建了一個供應商文件夾)在'API'文件夾中安裝了Slim,並且在供應商文件夾旁邊有一個'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 < ---可以是任何ID爲1至4
如何直接使用函數名而不是引用它,例如'$ app-> get('/ Types',getTypes);'?函數名稱作爲字符串在技術上可以在PHP中調用,但框架似乎使用字符串路由處理程序來引用控制器類的方法 – mzulch
您是否嘗試過在URL上鍵入「index.php」? 類似於http:// localhost:8080/angularjs/api/index.php/Types – PekosoG
對於你的評論,mzulch,我真的不知道該怎麼回答你,因爲我只是不明白你說的話......對於Pekoso,如果我有index.php,它會工作,但如果我嘗試添加一個id來獲取特定類型,它會給我一個404錯誤。我更詳細地更新了我的問題,並通過3鏈接真正瞭解發生了什麼。希望有人能幫助! –