willdurand hateoas bundle 的分页路由问题
Pagination route problems with willdurand hateoas bundle
我目前正在使用 Hateoas 开发一些 REST web 服务,我想为一些更长的列表显示实现分页。
注意:数据库检索逻辑尚未实现
这是我的控制器:
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;
}
我一直遇到的错误是:
"Some mandatory parameters are missing ("id") 为路由 "get_user_licences"
生成一个 URL
文档对路由参数不是很清楚,我找不到任何使用非空数组的示例。
UrlGenerator 始终忽略参数数组中给出的路由参数 ID。
我试过 array($id) 但它也不起作用。
当我尝试在同一个控制器中生成这样的路由时,没有问题:
$this->get('router')->generate('get_user_licences', array('id' => $id));
感谢您的帮助!
我发现了问题:实际上有一个 YML 配置文件重新定义了 Hateoas\Representation\PaginatedRepresentation 元数据...路由定义中用于参数的表达式不正确。对于 "next" link 例如我有:
expr(object.getPage() + 1)
而不是
expr(object.getParameters(object.getPage() + 1))
也许有一天这会对某人有所帮助!
我目前正在使用 Hateoas 开发一些 REST web 服务,我想为一些更长的列表显示实现分页。
注意:数据库检索逻辑尚未实现
这是我的控制器:
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;
}
我一直遇到的错误是:
"Some mandatory parameters are missing ("id") 为路由 "get_user_licences"
生成一个 URL文档对路由参数不是很清楚,我找不到任何使用非空数组的示例。
UrlGenerator 始终忽略参数数组中给出的路由参数 ID。 我试过 array($id) 但它也不起作用。
当我尝试在同一个控制器中生成这样的路由时,没有问题:
$this->get('router')->generate('get_user_licences', array('id' => $id));
感谢您的帮助!
我发现了问题:实际上有一个 YML 配置文件重新定义了 Hateoas\Representation\PaginatedRepresentation 元数据...路由定义中用于参数的表达式不正确。对于 "next" link 例如我有:
expr(object.getPage() + 1)
而不是
expr(object.getParameters(object.getPage() + 1))
也许有一天这会对某人有所帮助!