symfony 2 — Routing

symfony 2

symfony 2Symfony 1 и 2 позволяет организовать управление URL.
Генерируемые УРЛы могут быть дастаточно сложными, так же возможно отлаживать (Debug) пути.

Давайте самый простой вариант:
Допустим у Нас есть новый бандл RecordBundle:Record:show.
Допустим нам нужно открывать страницы /record/my-post или /record/all-about-symfony.

# app/config/routing.yml
record_show:
    pattern:   /record/{id}
    defaults:  { _controller: RecordBundle:Record:show }

У Symfony 2 для обеспечения /record/{id} нужно внести данные в _controller.

// RecordBundle:Record:show
// src/Record/RecordBundle/Controller/RecordController.php
 
namespace Record\RecordBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 
class RecordController extends Controller
{
    public function showAction($id)
    {
        $blog = // use the $id varible to query the database
 
        return $this->render('RecordBundle:Record:show.html.twig', array(
            '$id' => $id,
        ));
    }
}

Давайте сложнее пример, когда в УРЛе будет несколько переменных.
Допустим нам нужно как в обычном блоге записать УРЛ /articles/{lang}/{year}/{title}.{_format}.

article_show:
  pattern:  /articles/{lang}/{year}/{title}.{_format}
  defaults: { _controller: AcmeDemoBundle:Article:show, _format: html }
  requirements:
      lang:  en|fr|ru|ua
      _format:  html|rss
      year:     \d+

Как Вы понимаете переменные lang, year, title, format никак между собой нельзя различить.
Некоторым переменным можно назначить предопределённые переменные.
В результате будет /articles/rus/2010/my-post

Переменная _format устанавливает request format(формат запроса).
Переменная _controller устанавливает controller.


Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Загрузка...
Menu Title