13/05/2015 - SYMFONY, TWIG
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.
Varsayalım ki elimizde iki tane bundle var: Football\FrontendBundle
and Football\BackendBundle
.
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
@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.
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()
{
// ...
}
}
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)
{
// ...
}
}
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()
{
// ...
}
}
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/