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
, это не так.
На данный момент я потерял всякую надежду, и мне действительно нужна помощь, потому что я действительно что-то упускаю, но не могу догадаться, что:( ПОМОЩЬ!
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
Надеюсь, вы найдете, что не так с вышеизложенным