【问题标题】:Restler always returns 404: Not foundRestler 总是返回 404:未找到
【发布时间】:2013-12-27 15:16:04
【问题描述】:

我已经在我的本地服务器上安装了 Restler 来测试并为我的项目制作一些 API。

API 请求通过http://localhost/myproject/api/ 处理。

问题是每次我尝试发出请求时都会收到以下错误:

{
    "error": {
        "code": 404,
        "message": "Not Found"
    },
    "debug": {
        "source": "Routes.php:383 at route stage",
        "stages": {
            "success": [
                "get"
            ],
            "failure": [
                "route",
                "negotiate",
                "message"
            ]
        }
    }
}

这也是我的.htaccess

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api(.*)$ /myproject/api/api.php [QSA,L]

这就是api.php 的样子:

namespace myproject;

use Luracast\Restler\Restler;

require_once($_SERVER["DOCUMENT_ROOT"]."/myproject/resources/engine/settings.php");
require_once(Settings\Path\Absolute::$library."/restler/vendor/restler.php");

$restler = new Restler();
$restler->addAPIClass("myproject\\User");
$restler->handle();

我猜周围有一些错误配置,但我真的不知道出了什么问题。

(我也在 Stackoverflow 上尝试了一些解决方案,但它们似乎对我不起作用)

编辑:

我尝试使用以下路径 http://localhost/myproject/resources/engine/library/restler/public/examples 到达示例并且它们正在工作,所以我想这与 Restler 本身的配置有关,因为它似乎在 http://localhost/myproject/api 中不起作用。

此外,我还尝试在 http://localhost/myproject/api/explorer 中复制 Restler Explorer,但我一直收到错误消息:404 : Not Found ../resources.json 可能是因为我没有在项目的根文件夹中安装 Restler。我应该如何将 Restler 安装在不同的子文件夹中?

编辑 2: 我刚刚将以下类移动到示例 001 文件夹中:

class User {

    function data() {

        return "HELLO!";
    }
}

并在示例的index.php 中添加了这一行:

$r->addAPIClass('User');

如果我尝试在.../_001_helloworld/index.php/say/hello 运行示例,它可以正常工作,但如果我尝试_001_helloworld/index.php/user/data,它不会。

在这一点上,我已经失去了所有希望,我真的需要帮助,因为我确实错过了一些东西,但我真的猜不出是什么:( 帮助!

【问题讨论】:

    标签: php .htaccess restler


    【解决方案1】:

    以下是调试和查找错误的方法,

    • 删除 api.php 中的命名空间。这不是必需的,会导致问题。

    • 将资源管理器文件夹复制到/myproject/api 文件夹并将Resources 类添加为api 类

      $restler->addApiClass('Resources'); //this produces the needed resources.json
      
    • 如果您要添加带有命名空间的 User 类,请确保它在该命名空间下定义并且可用于您的 include 语句或自动加载器。

    • 您可以创建/myproject/api/cache 文件夹并使其可写。当您在生产模式下使用缓存刷新实例化 restler 时,如下所示,它将在缓存文件夹中创建 routes.php,其中列出了所有路由信息

      $restler = new Restler(true,true); //production_mode, refresh
      

    希望你发现上面有什么问题

    【讨论】:

    • 我按照前两个步骤解决了问题。谢谢你,我真的很感谢你的帮助:)
    • 我遇到了类似的问题。昨天一切正常,然后我开始收到来自 Restler 的 404 消息。我的 Web 服务器配置都没有改变。通过 index.php 可以正常工作,无论是否使用 index.php,都会创建一个在两种情况下都相同的 routes.php 文件。
    • 请忽略我的评论;我使用了错误的 URL.. Doh
    【解决方案2】:

    检查以确保您的函数是 public 而不是 private

    实际上我也遇到了同样的问题,只是花了一个小时才解决(facepalm)。

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 2012-08-16
      • 2020-03-25
      • 2018-10-10
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多