2016-11-09 9 views
2

В настоящее время я занимаюсь разработкой некоторых веб-сервисов REST с использованием Hateoas, и я хотел бы реализовать разбивку на страницы для отображения более длинного списка.Проблемы с разбивкой по страницам с помощью пакета willdurand 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; 
} 

ошибка я держу имея это:

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

Документация не очень ясна относительно r oute, и я не могу найти какой-либо пример с использованием непустого массива.

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

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

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

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

+0

Вы должны добавить свое решение в качестве ответа и принять его. Даже если он исправит эту ситуацию, это будет не единственное исправление этих симптомов, и другие люди смогут добавить другие решения, которые могут помочь другим людям. –

ответ

2

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

expr(object.getPage() + 1) 

вместо

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

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