Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

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/