Проблемы с маршрутом разбиения на страницы с пакетом 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;
}

Ошибка, с которой я продолжаю сталкиваться, такова:

" Отсутствуют некоторые обязательные параметры ("идентификатор") для создания URL-адреса для маршрута "get_user_licences"

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

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

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

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

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

Author: Julian Schoemaker, 2016-11-09

1 answers

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

expr(object.getPage() + 1)

Вместо

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

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

 2
Author: Julian Schoemaker, 2016-12-27 09:29:03