Restler всегда возвращает 404: Не найден


Я установил 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.

Кроме того, я также попытался скопировать проводник Restler в http://localhost/myproject/api/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, это не так.

На данный момент я потерял всякую надежду, и мне действительно нужна помощь, потому что я действительно что-то упускаю, но не могу догадаться, что:( ПОМОЩЬ!

Author: siannone, 2013-12-10

1 answers

Вот как вы можете отладить и найти, что не так,

  • Удалите пространство имен в api.php . Это не требуется и вызовет проблемы.

  • Скопируйте папку проводника в папку /myproject/api и добавьте класс ресурсов в качестве класса api

    $restler->addApiClass('Resources'); //this produces the needed resources.json
    
  • Если вы добавляете класс пользователя с пространством имен, убедитесь, что он определен в этом пространстве имен и доступен с помощью инструкций include или автозапуска.

  • Вы можете создать папку /myproject/api/cache и создать он доступен для записи. Когда вы создадите экземпляр restler в рабочем режиме с обновлением кэша, как показано ниже, он создаст routes.php в папке кэша, в которой указана вся информация о маршрутах

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

Надеюсь, вы найдете, что не так с вышеизложенным

 2
Author: Arul Kumaran, 2013-12-11 03:27:26