Bu yazı size çoğunlukla kullanılan yml dosyaları yerine, annotations ile routelerin nasıl ayarlandığını gösterecek. @Route ve @method kullanımı hakkında daha fazla bilgi için burayı tıklayın. Ayrıca routing hakkında genel bilgileri de okuyabilirsiniz.


Mevcut bundle yapısı


Varsayalım ki elimizde iki tane bundle var: Football\FrontendBundle and Football\BackendBundle.


Routing konfigürasyonu


Backend bundle ile ilgi olan tüm adresler "/backend" ile başlayacakır.


# sport/app/config/routing.yml
football_frontend:
resource: "@FootballFrontendBundle/Controller"
prefix: /
type: annotation

football_backend:
resource: "@FootballBackendBundle/Controller"
prefix: /backend
type: annotation

Örnek Frontend bundle controllerlar


@Route annotationı içinde "name" parametresini kullanmayarak routeye isim atamadığımız zaman, sistem otomatik olarak kendisi bir isim atar. Örnek olarak, helloAction methodunun ismi football_frontend_hello olur.


DefaultController


namespace Football\FrontendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
* @Route("")
*/
class DefaultController extends Controller
{
/**
* @Route("")
* @Method({"GET"})
*/
public function indexAction()
{
// ...
}
}

CountryController


namespace Football\FrontendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
* @Route("/country")
*/
class CountryController extends Controller
{
/**
* @Route("")
* @Method({"GET"})
*/
public function indexAction()
{
// ...
}

/**
* @Route("")
* @Method({"POST"})
*/
public function createAction()
{
// ...
}

/**
* @Route("{id}", requirements={"id" = "\d+"})
* @Method({"GET"})
*/
public function deleteAction($id)
{
// ...
}
}

Örnek Backend bundle controller


namespace Football\BackendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
* @Route("")
*/
class DefaultController extends Controller
{
/**
* @Route("")
* @Method({"GET"})
*/
public function indexAction()
{
// ...
}
}

Router bilgilerini kontrol etme


Eğer listede aynı isimde veya özelliklerde birden fazla router var ise, her ne kadar ikincisini çağırmak isteseniz bile, her zaman ilk sıradaki işlem görecektir.


inanzzz-MBP:sport inanzzz$ php app/console router:debug
[router] Current routes
Name Method Scheme Host Path
...
...
football_frontend_country_index GET ANY ANY /country
football_frontend_country_create POST ANY ANY /country
football_frontend_country_delete GET ANY ANY /country{id}
football_frontend_default_index GET ANY ANY /
football_backend_default_index GET ANY ANY /backend/