How to add prefix to some controllers using annotations? - php

I have at the moment two controllers.
GitlabAuthController
UserController
I need to add the path prefix api to UserController only.
Before I was trying following at annotations.yaml file:
controllers:
resource: ../../src/Controller/
type: annotation
prefix: api
But this adds the prefix to all my controllers.
Is there any way I can add the exception for the GitlabAuthController?

Just create different directories/namespaces for the different types of controllers.
Then you can do:
controllers:
resource: ../../src/Controller/
type: annotation
api_controllers:
resource: ../../src/Controller/Api
type: annotation
prefix: api
Routes defined on the Api namespace would get the /api/ prefix, while the other routes would remain unaffected.
You can check the generated routes are fine by executing bin/console debug:router.

Related

Use glob pattern to include controllers annotations routing with Symfony 4

I want to include all controllers for route annotation, giving a routes/annotations.yaml:
controllers:
resource: ../../src/{Site,Dashboard}/Controller/
type: annotation
The glob component is not giving folders but null (whereas files exist).
How can I use glob pattern in such way?

Symfony Bundle Load YML Configuration

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"

FileLoaderLoadException - can not get LexikJWTAuthenticationBundle to work - Symfony

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.

Symfony "No route found"

I recently built a new symfony-project with one simple controller to read in a .csv file and output it's content to a template.
I generated the bundle and the controller using the console and gave the controller the route "/browse".
When trying to run, (127.0.0.1:8000/browse) it tells me: "No route found for "GET/browse"".
src/OpiumBundle/Controller/BrowseController.php
<?php
namespace OpiumBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BrowseController extends Controller {
/**
* #Route("/browse")
*/
public function indexAction() {
$varPath = $this->get('kernel')->getRootDir().'/../var';
return $this->render('OpiumBundle:Browse:index.html.php', array(
// ...
));
}
}
app/config/routing.yml
opium:
resource: "#OpiumBundle/Resources/config/routing.yml"
prefix: /
app:
resource: '#AppBundle/Controller/'
type: annotation
unfortunately I can't post output from my debug:console, because my rep is too low. but there are two empty spaces where I guess they shouldn't:
debug:router
opium_homepage ANY ANY ANY /
homepage ANY ANY ANY /
When using the yml option while generating a bundle, will result in a bundle routing.yml file being created with a Bundle:Default:index of bundle_homepage, and the config file being included as a resource in your app routing.yml file.
Check your src/OpiumBundle/Resources/config/routing.yml file and ensure it reads as.
opium_bundle:
resource: '#OpiumBundle/Controller/'
type: annotation
Alternatively edit your app/config/routing.yml file to read
opium:
resource: "#OpiumBundle/Controller/"
prefix: /
type: annotation
app:
resource: '#AppBundle/Controller/'
type: annotation
Otherwise you will not be able to utilize annotation based routing and would need to manually add the routes to your routing.yml config files.
After making the changes clear your cache
php bin/console cache:clear
Check your routes to ensure that browse is included
php bin/console debug:router
Which should output
opium_browse_index ANY ANY ANY /browse

Symfony2 routing resource and type

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

Categories