Я установил 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
это не так.
На данный момент я потерял всякую надежду, и мне действительно нужна помощь, потому что я действительно что-то упускаю, но на самом деле не могу догадаться, что 🙁 ПОМОЩЬ!
Вот как вы можете отлаживать и находить ошибки,
Удалите пространство имен в api.php. Это не требуется и вызовет проблемы.
Скопируйте папку explorer в папку /myproject/api
и добавьте класс Resources в класс api
$restler->addApiClass('Resources'); //this produces the needed resources.json
Если вы добавляете класс User с пространством имен, убедитесь, что он определен в этом пространстве имен и доступен с вашими заявлениями или автозагрузчиком.
Вы можете создать папку /myproject/api/cache
и сделать ее доступной для записи. Когда вы создаете резервную копию в режиме производства с обновлением кеша, как показано ниже, он создаст файл маршрутов.php в кеше, в котором перечислены все данные маршрутов
$restler = new Restler(true,true); //production_mode, refresh
Упование вы находите что неправильно с вышеуказанным