Incomplete links generated in hal (zend-expressive-hal + zend-router)












0















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..










share|improve this question

























  • 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
















0















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..










share|improve this question

























  • 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














0












0








0








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..










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












1 Answer
1






active

oldest

votes


















0














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.






share|improve this answer























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    0














    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.






    share|improve this answer




























      0














      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.






      share|improve this answer


























        0












        0








        0







        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.






        share|improve this answer













        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.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 16 '18 at 18:20









        neradpneradp

        11




        11






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Xamarin.iOS Cant Deploy on Iphone

            Glorious Revolution

            Dulmage-Mendelsohn matrix decomposition in Python