Рестлер 3.0.0rc6.
Я установил простой сервис REST в Restler в моей локальной среде разработки. Когда я перешел на тестовый сервер, Рестлер не может найти ЛЮБОЙ маршрут.
У меня есть проекты в синхронизации с GIT через удаленный хост. Я только что вытащил последние локальные изменения на мой тестовый сервер, поэтому настройка папки должна быть в порядке.
Ошибка приходит в Routes.php
строка 362 в методе find
кто пытается найти метод API, соответствующий запрошенному URL. Инструкция в этом файле:
$p = Util::nestedValue(static::$routes, "v$version");
возвращается $p = NULL
, Значения параметров в вызове:
static::$routes is an empty array - array().
$version is int(1)
После этого кода условное выражение вызывает исключение, если $p = NULL
,
Я пробовал пример mininum Hello world и всегда получал одну и ту же проблему.
Поскольку приложение работало нормально на моем локальном сервере, я могу думать о некоторой конфигурации на моем тестовом сервере, которая все испортила, но не может отследить, что это такое. Поскольку я не знаю, с чего начать, я просто включаю некоторую информацию на случай, если она может быть полезна.
Я включаю конфигурацию моей папки:
html/api/ -> index.php and custom class files
html/api/data-base -> database acces files
html/api/vendor -> Restler
Мой файл index.php
<?php
require_once 'vendor/restler.php';
require_once('data-base/data-base-pdo.php');
use Luracast\Restler\Restler;
$r = new Restler();
$r->addAPIClass('Individuals');
$r->addAPIClass('Injuries');
$r->addAPIClass('Measurements');
$r->addAPIClass('Sessions');
$r->addAPIClass('Reports');
$r->handle();
Один из моих файлов классов:
<?php
use Luracast\Restler\RestException;
class Individuals
{
public $db;
public function __construct() {
$this->db = DataBase::getInstance();
}
public function index() {
return $this->db->individualsSelect();
}
public function get($id) {
try {
return $this->db->individualsSelectOne($id);
} catch(mysqli_exception $e) {
throw new RestException(500, $e->getMessage(), array(), $e);
} catch(InvalidArgumentException $e) {
throw new RestException(400, $e->getMessage(), array(), $e);
}
}
public function put($id, $request_data) {
try {
return $this->db->individualsUpdate($id, $request_data);
} catch(mysqli_exception $e) {
throw new RestException(500, $e->getMessage(), array(), $e);
} catch(InvalidArgumentException $e) {
throw new RestException(400, $e->getMessage(), array(), $e);
}
}
/**
* @url GET {individuals_id}/injuries
*/
public function injuries($individuals_id) {
try {
return $this->db->injuriesSelectByIndividual($individuals_id);
} catch(mysqli_exception $e) {
throw new RestException(500, $e->getMessage(), array(), $e);
} catch(InvalidArgumentException $e) {
throw new RestException(400, $e->getMessage(), array(), $e);
}
}
/**
* @url GET {individuals_id}/measurements
*/
public function measurements($individuals_id) {
try {
return $this->db->measurementsSelectByIndividual($individuals_id);
} catch(mysqli_exception $e) {
throw new RestException(500, $e->getMessage(), array(), $e);
} catch(InvalidArgumentException $e) {
throw new RestException(400, $e->getMessage(), array(), $e);
}
}
/**
* @url GET {individuals_id}/sessions
*/
public function sessions($individuals_id) {
try {
return $this->db->sessionsSelectByIndividual($individuals_id);
} catch(mysqli_exception $e) {
throw new RestException(500, $e->getMessage(), array(), $e);
} catch(InvalidArgumentException $e) {
throw new RestException(400, $e->getMessage(), array(), $e);
}
}
}
Проблема была с делом в именах файлов и именах классов. Все мои предложения начинаются с заглавной буквы, как Individuals
, но файлы все строчные, как individuals.php
, Моя среда разработки не чувствительна к регистру, поэтому рестлер мог найти файлы для моих предложений, но как только я развернул свой тестовый сервер, все было сломано.
Других решений пока нет …