Рестлер всегда возвращает 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();
Я предполагаю, что есть некоторая неправильная конфигурация вокруг, но я действительно не могу понять, что не так.
(Я также попробовал некоторые решения на Stackru, но они, похоже, не работают для меня)
Редактировать:
Я попытался достичь примера, используя следующий путь http://localhost/myproject/resources/engine/library/restler/public/examples
и они работают, так что я думаю, что это связано с конфигурацией самого Рестлера, потому что он, кажется, не работает в http://localhost/myproject/api
,
Кроме того, я также попытался скопировать Restler Explorer в http://localhost/myproject/api/explorer
и я продолжаю получать сообщение об ошибке: 404 : Not Found ../resources.json
вероятно, потому что я не установил Рестлер в корневую папку моего проекта. Как мне установить 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
это не так
В этот момент я потерял всякую надежду и мне действительно нужна помощь, потому что я действительно что-то упускаю, но не могу догадаться, что:(HELP!
1 ответ
Вот как вы можете отлаживать и находить что не так,
Удалите пространство имен в api.php. Это не обязательно и вызовет проблемы.
Скопируйте папку обозревателя в
/myproject/api
папку и добавить класс ресурсов в качестве класса API$restler->addApiClass('Resources'); //this produces the needed resources.json
Если вы добавляете класс User с пространством имен, убедитесь, что он определен в этом пространстве имен и доступен для ваших операторов включения или автозагрузчика.
Вы можете создать
/myproject/api/cache
папку и сделать ее доступной для записи. Когда вы создаете экземпляр restler в производственном режиме с обновлением кеша, как показано ниже, он создаст route.php в папке кеша, которая перечисляет всю информацию о маршрутах$restler = new Restler(true,true); //production_mode, refresh
Надеюсь, вы найдете, что не так с выше
Убедитесь, что ваша функция public
не private
.
На самом деле у меня была такая же проблема, и я потратил час на ее выяснение (facepalm).