FOSJsRoutingBundle icon indicating copy to clipboard operation
FOSJsRoutingBundle copied to clipboard

Empty routes

Open BonBonSlick opened this issue 6 years ago • 12 comments

Symfony 4.0.8 All cache cleared. Followed steps https://symfony.com/doc/master/bundles/FOSJsRoutingBundle/index.html

I do not have routing.yaml in config/, it is replaced with routes.xml. It does not accept resource parameter for route. Ok. Created routing.yaml, only for this package with single entry point

fos_js_routing:
    resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"

registered bundle, added fos_js_routing.yaml in config/packages/ folder.

    FOS\JsRoutingBundle\FOSJsRoutingBundle::class => ['all' => true],
fos_js_routing:
#    router: my_router_service
    cache_control:
        # All are optional, defaults shown
        public: false   # can be true (public) or false (private)
        maxage: null    # integer value, e.g. 300
        smaxage: null   # integer value, e.g. 300
        expires: null   # anything that can be fed to "new \DateTime($expires)", e.g. "5 minutes"
        vary: []        # string or array, e.g. "Cookie" or [ Cookie, Accept ]

linked files

       <script src="{{ asset('bundles/fosjsrouting/js/router.min.js') }}"></script>
        <script src="{{ asset('js/fos_js_routes.js') }}"></script> // tried also this way
        <script src="{{ path('fos_js_routing_js', { callback: 'fos.Router.setData' }) }}"></script>

dumping php bin/console fos:js-routing:dump or generatined with flex .json file are empty

routes.js fos.Router.setData({"base_url":"","routes":[],"prefix":"","host":"custom.host.locc","scheme":"http"}); .json {"base_url":"","routes":[],"prefix":"","host":"custom.host.locc","scheme":"http"}

parameters XML

        <parameter key="router.request_context.host">custom.host.locc</parameter>
        <parameter key="router.request_context.scheme">https</parameter>

Why so? What im doing wrong

BonBonSlick avatar Apr 29 '18 21:04 BonBonSlick

Did you expose your routes ?

Wimble84 avatar May 06 '18 12:05 Wimble84

I to have empty routres ! What do you mean expose ? I do not see anywhere in the documentation telling that you need to expose your routes

jhfyang avatar Jul 19 '18 11:07 jhfyang

I do not remember, removed package and developed own -_ - Maybe will try someday again.

BonBonSlick avatar Jul 21 '18 12:07 BonBonSlick

Same here. fos_js_routes.json just returns with

{"base_url":"","routes":[],"prefix":"","host":"localhost","scheme":"http"}

carlospauluk avatar Aug 14 '18 16:08 carlospauluk

I do not have routing.yaml in config/, it is replaced with routes.xml. It does not accept resource parameter for rout

XML also supports importing other resources: https://symfony.com/doc/current/routing/external_resources.html

stof avatar Aug 14 '18 18:08 stof

Think I find the solution:

Ok, I think I found the problem. Here it is:

Checking how the FOSJsRoutingBundle works, I found the ExposedRoutesExtractor.php , that checks if "isRouteExposed" on "getRoutes()" method.

I found that I needed to expose my routes by setting the 'exposed' = true option on the @Route, like this:

/**
*
* @Route("/bse/pessoa/findByNome/{str}", name="bse_pessoa_findByNome", methods={"GET"}, options = { "expose" = true })
*
*/
public function findByNome($str = null)
{
[...]

But, even after that, FOSJsRoutingBundle continues not showing anyone.

In this Issue https://github.com/FriendsOfSymfony/FOSRestBundle/issues/718 they said that routes defined by annotations (FOSRest routes???) was not caught by this ExposedRoutesExtractor, only if they were exposed in yaml.

So I dit it. On config/routes/annotations.yaml I added:

controllers: resource: ../../src/Controller/ type: annotation options: expose: true

Voila.

php bin/console fos:js-routing:debug now shows all my routes.

carlospauluk avatar Aug 14 '18 18:08 carlospauluk

Thanks @carlospauluk for finding this!

I had the same issue. However, bin/console fos:js-routing:debug was showing me the annotation exposed route already, but calling Routing.generate() resulted in an error.

With that static config approach it works. Which is a bummer, because now all routes are exposed by default. But I can live with that :)

PythooonUser avatar May 24 '19 08:05 PythooonUser

Did you expose your routes ?

Is it possible to expose routes while using yaml for routing definitions?

expose key is unsupported in YamlFileLoader.

versedi avatar Nov 13 '19 10:11 versedi

Did you expose your routes ?

Is it possible to expose routes while using yaml for routing definitions?

expose key is unsupported in YamlFileLoader.

Yes it is, like this :

your_route_name:
    path: /path/{argument}
    controller: App\Controller\YourController::yourAction
    options:
        expose: true

Wimble84 avatar Nov 13 '19 10:11 Wimble84

Did you expose your routes ?

Is it possible to expose routes while using yaml for routing definitions? expose key is unsupported in YamlFileLoader.

Yes it is, like this :

your_route_name:
    path: /path/{argument}
    controller: App\Controller\YourController::yourAction
    options:
        expose: true

Thank you, my Google-Fu failed on me and couldn't find a single thing in the docs :)

versedi avatar Nov 13 '19 10:11 versedi

I'm successfully exposing specific routes through their annotation:

@Route("/example", name="example", options={"expose"=true})

Perhaps that means the issue @carlospauluk described is solved?

I think the documentation needs to put more emphasis on the need to expose the routes, and the many ways to do it, right before Generating URIs.

o-alquimista avatar Jan 19 '20 20:01 o-alquimista

Maybe you forgot to dump the newly exposed routes ? I overlooked this after exposing a route. Symfony Flex bin/console fos:js-routing:dump --format=json --target=public/js/fos_js_routes.json

EliaCools avatar Sep 15 '21 16:09 EliaCools