I followed this tutorial and got SonataAdminBundle successfully installed. However, I'm very new to Symfony2 and I'm having trouble understanding parts of the routing configuration found in the tutorial.
# app/config/routing.yml
_sonata_admin:
resource: .
type: sonata_admin
prefix: /admin
Where does resource: . get the routes from?
What does type: sonata_admin mean?
Thanks!
The type key permits to the different routing loaders to know which one supports loading this routing resource.
The resource: . is just here to say that it will load everything. In fact, the routing loader does not care about this parameter, that's why you put ..
Related
What does the type: configuration in a Symfony routing file control? What are its valid values?
I can't find this configuration field explicitly documented anywhere. It's referenced indirectly in Symfony's routing documentation.
app_directory:
resource: '../legacy/routing/'
type: directory
and seems related to loading in additional routes. However, its behavior (or all its allowed values) doesn't seem to be explicatly defined anywhere. I can make a guess that it somehow tells Symfony how to load the external routes, but I'd love to know
Is my guess correct?
Are there valid values other than directory or annotation?
Is this formally documented anywhere?
Is there a spot in the Symfony internals that would be a good place to start finding these answers for myself?
You can find how the type works in the Symfony documentation, see code below. It controls if the routes should be loaded from the PHP annotations or the YAML or XML files found in that (bundle) directory.
app_file:
# loads routes from the given routing file stored in some bundle
resource: '#AcmeOtherBundle/Resources/config/routing.yaml'
app_annotations:
# loads routes from the PHP annotations of the controllers found in that directory
resource: '../src/Controller/'
type: annotation
app_directory:
# loads routes from the YAML or XML files found in that directory
resource: '../legacy/routing/'
type: directory
app_bundle:
# loads routes from the YAML or XML files found in some bundle directory
resource: '#AppBundle/Resources/config/routing/public/'
type: directory
Since I am new to Symfony and I couldn't manage to find some useful information in google I decided to write to you.
I've read about the way of loading custom DI alias information from a dependency injector in your bundle and how to create a Configuration class that will expose the alias structure. However I am to some extend confused how I can create a file, for example routing.yml, in my AcmeBundle/Resources/config/ folder and read the data from it. E.g:
some_alias:
resource: "#AcmeBundle/Controller/"
type: annotation
prefix: /
I want to make a bundle with routing, independent from the main configuration files in the app folder.
You can create your bundle routing.yml in your WhateverBundle/Resources/config/routing.yml and the in the app/routing.yml just include your bundle's routes.
mybundleorwhatever:
resource: "#WhateverBundle/Resources/config/routing.xml"
I am trying to build my rest api with symfony and https://github.com/FriendsOfSymfony/FOSRestBundle
I did everything as described in examples but everytime i set the type of my api to "rest" in my routing.yml i get the following error:
[Symfony\Component\Config\Exception\FileLoaderLoadException]
Class could not be determined for Controller identified by
"InveusUserBundle/Controller/UsersController" in
InveusUserBundle/Controller/UsersController
(which is being imported from "/vagrant/app/config/routing.yml").
Make sure there is a loader supporting the "rest" type.
Add route to your controller in: YourBundle/Resources/config/routing.yml
myconfig:
type: rest
prefix: /api
resource: YourBundle\Controller\Api\YourController
name_prefix: api_ # naming collision
Imoprt your bundle routing.yml file into app/config/routing.yml
appRoute:
resource: "#YourBundle/Resources/config/routing.yml"
type: rest
prefix: /api
This config should fix the error.
I have a very strange issue, with my Symfony2 setup.
I'm working on a restful webservice and would like to setup routing.
I have a fully working application and woud like to change my routing.yml config.
Working configuration
my_product:
resource: My\Bundle\ProductBundle\Controller\DefaultController
type: rest
prefix: /
When I change that to:
my_product:
resource: "#MyProductBundle/Controller/"
type: rest
prefix: /
I get the following error:
Symfony\Component\Config\Exception\FileLoaderLoadException"
message="Can't find class for controller
"#MyProductBundle/Controller/" in #MyProductBundle/Controller/ (which
is being imported from
"/home/myproduct/domains/example/v5/app/config/routing.yml"). Make
sure the "MyProductBundle" bundle is correctly registered and loaded
in the application kernel class. If the bundle is registered, make
sure the bundle path "#MyProductBundle/Controller/" is not empty.
When I change the type from "rest" to "annotation", the error disappears.
What am I doing wrong? I can't find it out and my searches lead to nothing.
Many thanks in advance!
You can't currently import all of a bundle's controllers at once when using FOSRestBundle. It will be added in FOSRestBundle 2.0. Import your controllers individually like in your first example.
I have issue with routing in my Symfony 2 application.
This application contains 2 bundles MainSiteBundle and GalleryBundle
I configured routing with prefixes like that:
app/config/routing.yml
honorata_photo_main_site:
resource: "#HonorataPhotoMainSiteBundle/Resources/config/routing.yml"
prefix: /
honorata_photo_gallery:
resource: "#HonorataPhotoGalleryBundle/Resources/config/routing.yml"
prefix: /gallery
Routine inside each bundle is not important now because i have issue with this.
When I try to access / route everything works fine (even with sub routes inside bundle)
When I try to access /gallery route it shows me error like:
No route found for "GET ery"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException ยป
Why Symfony 2 router cuts first 3 letters after / ?
I would guess that inside "#HonorataPhotoMainSiteBundle/Resources/config/routing.yml" you have some more general route defined.
Try reversing the order of definition:
honorata_photo_gallery:
resource: "#HonorataPhotoGalleryBundle/Resources/config/routing.yml"
prefix: /gallery
honorata_photo_main_site:
resource: "#HonorataPhotoMainSiteBundle/Resources/config/routing.yml"
prefix: /
Subject resolved and closed !
Problem was that /gallery path already exist in MainSiteBundle I realised that using php app/console route:debug and after deeper analysis :)
Next time I will make routing log to prevent that in the future.