我的本地主机没有使用正确的路径

My localhost doesn't use the right path

我正在制作一个 AngularJS 应用程序并且我正在使用一个 Slim API。我使用 API 从我的数据库中获取数据。

我在测试我的应用程序时发现了一些东西。我的应用程序在本地主机中,但在服务器中,它们使用完全相同的代码。我使用此代码调用我的 API:

angular.module('appDatabaseCtrl', [])
.controller('databaseCtrl', ['$scope','$routeParams', '$http', '$log',
    function($scope, $routeParams, $http, $log){
        $scope.testDatabaseItems = function(){
            $http.get('/api/items').success(function(data) {
                $log.info("succes!");
                $log.log(data);
            })
            .error(function (data, status){
                $log.error("error!");
                $log.log(data);
            });
        };
        $scope.testDatabaseItemById = function(){
            $http.get('/api/items/' + $scope.id).success(function(data) {
                $log.info("succes!");
                $log.log(data);
            })
            .error(function (data, status){
                $log.error("error!");
                $log.log(data);
            });
        };
    }
]);

这是我在 Slim "index.php" 中的文件 API:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

//nécessite Slim
require 'vendor/autoload.php';


//Instancie une app de Slim
$app = new \Slim\App;

//Associe type de requête avec fonction et paramêtres
$app->get('/items', 'getItems');
$app->get('/items/{id:\d+}', 'getItemById');

//Démarre l'application
$app->run();

// Accès à la base de données
function DB_Connection() {  
    $dbhost = "localhost";
    $dbuser = "kevdug_angularjs";
    $dbpass = "*****************";
    $dbname = "angularjs";
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}

function getItems() {
    $sql = "select * FROM aj_items";
    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 getItemById(Request $request, Response $response, $args) {
    $id = $args["id"];
    $sql = "select * FROM aj_items 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() .'}}'; 
    }
}

?>

如果我在我的服务器上的应用程序中使用 "testDatabaseItems" 函数,它完全可以工作,但是当我尝试在我的本地主机中使用它时,我收到 404 错误:

"NetworkError: 404 Not Found - http://localhost:8080/api/items"

我知道我收到 404 错误页面的原因很简单,地址应该是:

localhost:8080/angularjs/api/items

我想要的是在我的本地主机版本中,它使用正确的路径,但我不需要为我的本地主机版本和服务器版本设置不同的代码。

另一件奇怪的事情是,如果我去 http://kevdug.webfactional.com/api/items,我会像我期望的那样得到我的 json 对象,但是在我的本地主机中,我需要去“(我的本地主机地址) /api/index.php/items”。出于某种原因,我需要指定 "index.php" 文件,但我不想这样做。

关于远程服务器和本地服务器配置,使用简单的布尔值即可。

// the uri-base is for both remote and local server the same
$uri = 'http://localhost:8080/';

期望远程服务器上当前文件的 uri 与本地服务器上的 file-uri 不同。 例如,在远程服务器上它是 /www/site/class.php 而在本地服务器上它是 c:/php/class.php 如果这不起作用,请使用另一个 pc-specific 指纹,或者只是将文件放在 remote-server 上并检查文件是否存在。

示例代码

if(strpos(__FILE__, 'c:/php/') === 0) {

  # is local config
  $uri .= 'angularjs/api/items';
}
else {

  # is remote config
  $uri .= 'api/items';
}