Проблемы с маршрутом пагинации с помощью пакета willdurand hateoas

В настоящее время я разрабатываю некоторые веб-сервисы REST с использованием Hateoas, и я хотел бы реализовать разбиение на страницы для более длинного отображения списка.

Примечание. Логика получения базы данных еще не реализована.

Это мой контроллер:

use Hateoas\Representation\PaginatedRepresentation;
use Hateoas\Representation\CollectionRepresentation;

/**
* @Rest\View(serializerGroups={"details"})
* @Doc\ApiDoc(
*     section="User",
*     resource=true,
*     description="Get all catalogs accessible by a User",
*     requirements={
*          {
*          "name"="id",
*          "dataType"="integer",
*          "requirement"="\d+",
*          "description"="The id of the user from which to retrieve"*          }
*     },
*     output={
*          "class"="\CatalogV2",
*          "groups"={"details"}
*     }
* )
*/
public function getUserLicencesAction($id, $page = 1, $limit = 10) {
$service_rustine = $this->container->get('rustine_core.link');
// Get User corresponding to id
$user = $service_rustine->getUser($id);

// Get licences
$licences = $user->getLicencesRight();

$offset = ($page - 1) * $limit;
$pages = (int)ceil(count($licences) / $limit);

$collection = new CollectionRepresentation(
array_slice($licences, $offset, $page * $limit),
'licences',
'licences',
new Exclusion(array("details"))
);
$paginated = new PaginatedRepresentation(
$collection,
'get_user_licences',
array("id" => $id),
$page,
$limit,
$pages
);

// JSON output
return $paginated;
}

Ошибка, которую я продолжаю иметь:

Msgstr «Некоторые обязательные параметры отсутствуют (» id «) для генерации URL для маршрута» get_user_licences «

В документации не очень ясно о параметрах маршрута, и я не могу найти ни одного примера с использованием непустого массива.

Идентификатор параметра маршрута, указанный в массиве параметров, всегда игнорируется в UrlGenerator.
Я пробовал массив ($ id), но он тоже не работает.

Когда я пытаюсь, в том же контроллере, чтобы сгенерировать маршрут с таким, нет проблем:

$this->get('router')->generate('get_user_licences', array('id' => $id));

Спасибо за помощь !

2

Решение

Я обнаружил проблему: на самом деле был файл конфигурации YML, переопределяющий метаданные Hateoas \ Presentation \ PaginatedRepresentation … Выражения, используемые для параметров в определениях маршрутов, были неверными. Для «следующей» ссылки, например, у меня было:

expr(object.getPage() + 1)

вместо

expr(object.getParameters(object.getPage() + 1))

Может быть, это поможет кому-то однажды!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]