Incomplete links generated in hal (zend-expressive-hal + zend-router)
My routes def:
'router' => [
'routes' => [
'TimeTable' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/tt',
],
'may_terminate' => false,
'child_routes' => [
'API' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/api',
],
'may_terminate' => false,
'child_routes' => [
'lines' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/lines',
'defaults' => [
'controller' => ControllerLineRestApiController::class,
],
],
'may_terminate' => true,
],
],
],
],
],
],
Medatada map def:
MetadataMap::class => [
[
'__class__' => RouteBasedCollectionMetadata::class,
'collection_class' => LineCollection::class,
'collection_relation' => 'lines',
'route' => 'TimeTable/API/Lines',
],
]
Generated result:
{
"_total_items": 78,
"_page": 1,
"_page_count": 4,
"_links": {
"self": {
"href": "http://xxx.xxx.xx"
},
"next": {
"href": "http://xxx.xxx.xx"
},
"last": {
"href": "http://xxx.xxx.xx"
}
},
"_embedded": {
"lines": [.....] }}
All links are generated with incomplete href , there is only domain part, route part is stripped ..
Expected result is something like this:
"href" : "http://xxx.xxx.xx/xxx/tt/api/lines....."
Im doing something wrong, I have no idea where to start ..
Thanks everyone for giving me some ideas
Simplified Controller code:
$psr7request = Psr7ServerRequest::fromZend($this->getRequest());
$list = this->entityManager->getRepository(Line::class)->getValidLinesCollection();
$resource = $this->resourceGenerator->fromObject($list, $psr7request);
echo Psr7Response::toZend($this->responseFactory->createResponse($psr7request, $resource))->getBody();
exit;
PS: Im not using full zend-expressive just zend-framework..
zend-expressive zend-router
add a comment |
My routes def:
'router' => [
'routes' => [
'TimeTable' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/tt',
],
'may_terminate' => false,
'child_routes' => [
'API' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/api',
],
'may_terminate' => false,
'child_routes' => [
'lines' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/lines',
'defaults' => [
'controller' => ControllerLineRestApiController::class,
],
],
'may_terminate' => true,
],
],
],
],
],
],
Medatada map def:
MetadataMap::class => [
[
'__class__' => RouteBasedCollectionMetadata::class,
'collection_class' => LineCollection::class,
'collection_relation' => 'lines',
'route' => 'TimeTable/API/Lines',
],
]
Generated result:
{
"_total_items": 78,
"_page": 1,
"_page_count": 4,
"_links": {
"self": {
"href": "http://xxx.xxx.xx"
},
"next": {
"href": "http://xxx.xxx.xx"
},
"last": {
"href": "http://xxx.xxx.xx"
}
},
"_embedded": {
"lines": [.....] }}
All links are generated with incomplete href , there is only domain part, route part is stripped ..
Expected result is something like this:
"href" : "http://xxx.xxx.xx/xxx/tt/api/lines....."
Im doing something wrong, I have no idea where to start ..
Thanks everyone for giving me some ideas
Simplified Controller code:
$psr7request = Psr7ServerRequest::fromZend($this->getRequest());
$list = this->entityManager->getRepository(Line::class)->getValidLinesCollection();
$resource = $this->resourceGenerator->fromObject($list, $psr7request);
echo Psr7Response::toZend($this->responseFactory->createResponse($psr7request, $resource))->getBody();
exit;
PS: Im not using full zend-expressive just zend-framework..
zend-expressive zend-router
Please paste your handler or action code which would contain the line with$this->resourceGenerator->...
– ksoni
Nov 15 '18 at 2:43
It looks like your problem might be this line 'route' => 'TimeTableAPILines' it should be 'route' => 'TimeTable/API/Lines',
– ksoni
Nov 15 '18 at 3:13
Of course route path has / separator in my code, I made typo just here
– neradp
Nov 16 '18 at 5:39
add a comment |
My routes def:
'router' => [
'routes' => [
'TimeTable' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/tt',
],
'may_terminate' => false,
'child_routes' => [
'API' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/api',
],
'may_terminate' => false,
'child_routes' => [
'lines' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/lines',
'defaults' => [
'controller' => ControllerLineRestApiController::class,
],
],
'may_terminate' => true,
],
],
],
],
],
],
Medatada map def:
MetadataMap::class => [
[
'__class__' => RouteBasedCollectionMetadata::class,
'collection_class' => LineCollection::class,
'collection_relation' => 'lines',
'route' => 'TimeTable/API/Lines',
],
]
Generated result:
{
"_total_items": 78,
"_page": 1,
"_page_count": 4,
"_links": {
"self": {
"href": "http://xxx.xxx.xx"
},
"next": {
"href": "http://xxx.xxx.xx"
},
"last": {
"href": "http://xxx.xxx.xx"
}
},
"_embedded": {
"lines": [.....] }}
All links are generated with incomplete href , there is only domain part, route part is stripped ..
Expected result is something like this:
"href" : "http://xxx.xxx.xx/xxx/tt/api/lines....."
Im doing something wrong, I have no idea where to start ..
Thanks everyone for giving me some ideas
Simplified Controller code:
$psr7request = Psr7ServerRequest::fromZend($this->getRequest());
$list = this->entityManager->getRepository(Line::class)->getValidLinesCollection();
$resource = $this->resourceGenerator->fromObject($list, $psr7request);
echo Psr7Response::toZend($this->responseFactory->createResponse($psr7request, $resource))->getBody();
exit;
PS: Im not using full zend-expressive just zend-framework..
zend-expressive zend-router
My routes def:
'router' => [
'routes' => [
'TimeTable' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/tt',
],
'may_terminate' => false,
'child_routes' => [
'API' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/api',
],
'may_terminate' => false,
'child_routes' => [
'lines' => [
'type' => 'Literal',
'options' => [
// Change this to something specific to your module
'route' => '/lines',
'defaults' => [
'controller' => ControllerLineRestApiController::class,
],
],
'may_terminate' => true,
],
],
],
],
],
],
Medatada map def:
MetadataMap::class => [
[
'__class__' => RouteBasedCollectionMetadata::class,
'collection_class' => LineCollection::class,
'collection_relation' => 'lines',
'route' => 'TimeTable/API/Lines',
],
]
Generated result:
{
"_total_items": 78,
"_page": 1,
"_page_count": 4,
"_links": {
"self": {
"href": "http://xxx.xxx.xx"
},
"next": {
"href": "http://xxx.xxx.xx"
},
"last": {
"href": "http://xxx.xxx.xx"
}
},
"_embedded": {
"lines": [.....] }}
All links are generated with incomplete href , there is only domain part, route part is stripped ..
Expected result is something like this:
"href" : "http://xxx.xxx.xx/xxx/tt/api/lines....."
Im doing something wrong, I have no idea where to start ..
Thanks everyone for giving me some ideas
Simplified Controller code:
$psr7request = Psr7ServerRequest::fromZend($this->getRequest());
$list = this->entityManager->getRepository(Line::class)->getValidLinesCollection();
$resource = $this->resourceGenerator->fromObject($list, $psr7request);
echo Psr7Response::toZend($this->responseFactory->createResponse($psr7request, $resource))->getBody();
exit;
PS: Im not using full zend-expressive just zend-framework..
zend-expressive zend-router
zend-expressive zend-router
edited Nov 16 '18 at 5:48
neradp
asked Nov 13 '18 at 20:06
neradpneradp
11
11
Please paste your handler or action code which would contain the line with$this->resourceGenerator->...
– ksoni
Nov 15 '18 at 2:43
It looks like your problem might be this line 'route' => 'TimeTableAPILines' it should be 'route' => 'TimeTable/API/Lines',
– ksoni
Nov 15 '18 at 3:13
Of course route path has / separator in my code, I made typo just here
– neradp
Nov 16 '18 at 5:39
add a comment |
Please paste your handler or action code which would contain the line with$this->resourceGenerator->...
– ksoni
Nov 15 '18 at 2:43
It looks like your problem might be this line 'route' => 'TimeTableAPILines' it should be 'route' => 'TimeTable/API/Lines',
– ksoni
Nov 15 '18 at 3:13
Of course route path has / separator in my code, I made typo just here
– neradp
Nov 16 '18 at 5:39
Please paste your handler or action code which would contain the line with
$this->resourceGenerator->...
– ksoni
Nov 15 '18 at 2:43
Please paste your handler or action code which would contain the line with
$this->resourceGenerator->...
– ksoni
Nov 15 '18 at 2:43
It looks like your problem might be this line 'route' => 'TimeTableAPILines' it should be 'route' => 'TimeTable/API/Lines',
– ksoni
Nov 15 '18 at 3:13
It looks like your problem might be this line 'route' => 'TimeTableAPILines' it should be 'route' => 'TimeTable/API/Lines',
– ksoni
Nov 15 '18 at 3:13
Of course route path has / separator in my code, I made typo just here
– neradp
Nov 16 '18 at 5:39
Of course route path has / separator in my code, I made typo just here
– neradp
Nov 16 '18 at 5:39
add a comment |
1 Answer
1
active
oldest
votes
Sorry i forgot that i had done in last week :(
It must be done some custom implementation for UrlGeneratorInterface to successful integrate zend-expressive-hal to zend framework (original class ExpressiveUrlGenerator uses ExpressiveHelperServerUrlHelper & UrlHelper, the part of Expressive)
So i used ZendViewHelperServerUrl & Url to done it.
I have small typo in code. The final class is here:
use PsrHttpMessageServerRequestInterface;
use ZendExpressiveHalLinkGeneratorUrlGeneratorInterface;
use ZendViewHelperServerUrl as ServerUrlHelper;
use ZendViewHelperUrl as UrlHelper;
class HalUrlGenerator implements UrlGeneratorInterface
{
/**
* @var null|ServerUrlHelper
*/
private $serverUrlHelper;
/**
* @var UrlHelper
*/
private $urlHelper;
public function __construct(UrlHelper $urlHelper, ServerUrlHelper $serverUrlHelper = null)
{
$this->urlHelper = $urlHelper;
$this->serverUrlHelper = $serverUrlHelper;
}
public function generate(
ServerRequestInterface $request,
string $routeName,
array $routeParams = ,
array $queryParams =
) : string {
$urlHelper = $this->urlHelper;
$path = $urlHelper($routeName, $routeParams, ['query'=> $queryParams]);
if (! $this->serverUrlHelper) {
return $path;
}
$serverUrlHelper = $this->serverUrlHelper;
return $serverUrlHelper($path);
}
}
I hope the code can help somebody.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53288696%2fincomplete-links-generated-in-hal-zend-expressive-hal-zend-router%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sorry i forgot that i had done in last week :(
It must be done some custom implementation for UrlGeneratorInterface to successful integrate zend-expressive-hal to zend framework (original class ExpressiveUrlGenerator uses ExpressiveHelperServerUrlHelper & UrlHelper, the part of Expressive)
So i used ZendViewHelperServerUrl & Url to done it.
I have small typo in code. The final class is here:
use PsrHttpMessageServerRequestInterface;
use ZendExpressiveHalLinkGeneratorUrlGeneratorInterface;
use ZendViewHelperServerUrl as ServerUrlHelper;
use ZendViewHelperUrl as UrlHelper;
class HalUrlGenerator implements UrlGeneratorInterface
{
/**
* @var null|ServerUrlHelper
*/
private $serverUrlHelper;
/**
* @var UrlHelper
*/
private $urlHelper;
public function __construct(UrlHelper $urlHelper, ServerUrlHelper $serverUrlHelper = null)
{
$this->urlHelper = $urlHelper;
$this->serverUrlHelper = $serverUrlHelper;
}
public function generate(
ServerRequestInterface $request,
string $routeName,
array $routeParams = ,
array $queryParams =
) : string {
$urlHelper = $this->urlHelper;
$path = $urlHelper($routeName, $routeParams, ['query'=> $queryParams]);
if (! $this->serverUrlHelper) {
return $path;
}
$serverUrlHelper = $this->serverUrlHelper;
return $serverUrlHelper($path);
}
}
I hope the code can help somebody.
add a comment |
Sorry i forgot that i had done in last week :(
It must be done some custom implementation for UrlGeneratorInterface to successful integrate zend-expressive-hal to zend framework (original class ExpressiveUrlGenerator uses ExpressiveHelperServerUrlHelper & UrlHelper, the part of Expressive)
So i used ZendViewHelperServerUrl & Url to done it.
I have small typo in code. The final class is here:
use PsrHttpMessageServerRequestInterface;
use ZendExpressiveHalLinkGeneratorUrlGeneratorInterface;
use ZendViewHelperServerUrl as ServerUrlHelper;
use ZendViewHelperUrl as UrlHelper;
class HalUrlGenerator implements UrlGeneratorInterface
{
/**
* @var null|ServerUrlHelper
*/
private $serverUrlHelper;
/**
* @var UrlHelper
*/
private $urlHelper;
public function __construct(UrlHelper $urlHelper, ServerUrlHelper $serverUrlHelper = null)
{
$this->urlHelper = $urlHelper;
$this->serverUrlHelper = $serverUrlHelper;
}
public function generate(
ServerRequestInterface $request,
string $routeName,
array $routeParams = ,
array $queryParams =
) : string {
$urlHelper = $this->urlHelper;
$path = $urlHelper($routeName, $routeParams, ['query'=> $queryParams]);
if (! $this->serverUrlHelper) {
return $path;
}
$serverUrlHelper = $this->serverUrlHelper;
return $serverUrlHelper($path);
}
}
I hope the code can help somebody.
add a comment |
Sorry i forgot that i had done in last week :(
It must be done some custom implementation for UrlGeneratorInterface to successful integrate zend-expressive-hal to zend framework (original class ExpressiveUrlGenerator uses ExpressiveHelperServerUrlHelper & UrlHelper, the part of Expressive)
So i used ZendViewHelperServerUrl & Url to done it.
I have small typo in code. The final class is here:
use PsrHttpMessageServerRequestInterface;
use ZendExpressiveHalLinkGeneratorUrlGeneratorInterface;
use ZendViewHelperServerUrl as ServerUrlHelper;
use ZendViewHelperUrl as UrlHelper;
class HalUrlGenerator implements UrlGeneratorInterface
{
/**
* @var null|ServerUrlHelper
*/
private $serverUrlHelper;
/**
* @var UrlHelper
*/
private $urlHelper;
public function __construct(UrlHelper $urlHelper, ServerUrlHelper $serverUrlHelper = null)
{
$this->urlHelper = $urlHelper;
$this->serverUrlHelper = $serverUrlHelper;
}
public function generate(
ServerRequestInterface $request,
string $routeName,
array $routeParams = ,
array $queryParams =
) : string {
$urlHelper = $this->urlHelper;
$path = $urlHelper($routeName, $routeParams, ['query'=> $queryParams]);
if (! $this->serverUrlHelper) {
return $path;
}
$serverUrlHelper = $this->serverUrlHelper;
return $serverUrlHelper($path);
}
}
I hope the code can help somebody.
Sorry i forgot that i had done in last week :(
It must be done some custom implementation for UrlGeneratorInterface to successful integrate zend-expressive-hal to zend framework (original class ExpressiveUrlGenerator uses ExpressiveHelperServerUrlHelper & UrlHelper, the part of Expressive)
So i used ZendViewHelperServerUrl & Url to done it.
I have small typo in code. The final class is here:
use PsrHttpMessageServerRequestInterface;
use ZendExpressiveHalLinkGeneratorUrlGeneratorInterface;
use ZendViewHelperServerUrl as ServerUrlHelper;
use ZendViewHelperUrl as UrlHelper;
class HalUrlGenerator implements UrlGeneratorInterface
{
/**
* @var null|ServerUrlHelper
*/
private $serverUrlHelper;
/**
* @var UrlHelper
*/
private $urlHelper;
public function __construct(UrlHelper $urlHelper, ServerUrlHelper $serverUrlHelper = null)
{
$this->urlHelper = $urlHelper;
$this->serverUrlHelper = $serverUrlHelper;
}
public function generate(
ServerRequestInterface $request,
string $routeName,
array $routeParams = ,
array $queryParams =
) : string {
$urlHelper = $this->urlHelper;
$path = $urlHelper($routeName, $routeParams, ['query'=> $queryParams]);
if (! $this->serverUrlHelper) {
return $path;
}
$serverUrlHelper = $this->serverUrlHelper;
return $serverUrlHelper($path);
}
}
I hope the code can help somebody.
answered Nov 16 '18 at 18:20
neradpneradp
11
11
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53288696%2fincomplete-links-generated-in-hal-zend-expressive-hal-zend-router%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Please paste your handler or action code which would contain the line with
$this->resourceGenerator->...
– ksoni
Nov 15 '18 at 2:43
It looks like your problem might be this line 'route' => 'TimeTableAPILines' it should be 'route' => 'TimeTable/API/Lines',
– ksoni
Nov 15 '18 at 3:13
Of course route path has / separator in my code, I made typo just here
– neradp
Nov 16 '18 at 5:39