Основы Symfony 2

Опубликовано 2013.07.23

Выдержки и памятки из различных статей. Мои собственные заметки.
  • app/: Конфигурация приложения
  • src/: PHP код проекта
  • vendor/: Сторонние зависимости
  • web/: Корневая директория web-сервера

Создание бандла

Я работаю в режиме девелопера, так что корректируйте пути к файлам конфига. Пусть это будет бандл для работы с блогами.
  • В файл app/config/AppKernel.php добавил свой бандл
    1. $bundles[] = new Blog\BlogBundle\BlogBundle();
    куда добавлять - сразу поймёте, там всё просто.
  • В файл app/config/routing_dev.yml добавил следующий код:
    1. blog:
    2. resource: "@BlogBundle/Resources/config/routing.yml"
    Теперь указан путь к роутингу моего бандла.
  • Создаем сам бандл. В папке src создаем папку Blog. В ней BlogBundle и в ней файл BlogBundle.php , а также папки Controller и Resources
    1. src -> Blog -> Controller
    2. Resources
    3. BlogBundle.php
  • В BlogBundle.php помещаем такой код:
    1. namespace Blog\BlogBundle;
    2.  
    3. use Symfony\Component\HttpKernel\Bundle\Bundle;
    4.  
    5. class BlogBundle extends Bundle
    6. {
    7. }
    Теперь у нас своё пространство имён, специально для бандла Blog.
  • В папке Controller создаем файл BlogController.php со следующим содержимым:
    1. namespace Blog\BlogBundle\Controller;
    2.  
    3. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    4. use Symfony\Component\HttpFoundation\Response;
    5.  
    6. class BlogController extends Controller{
    7. public function indexAction(){
    8. return new Response('Main blog page');
    9. }
    10.  
    11. public function oneBlogAction($id = 0) {
    12. return new Response('blog number ' . $id);
    13. }
    14. }
    Теперь есть главный класс, в котором есть функция, отвечающая за вывод главной страницы блогов.
  • Определяем роутинг нашего бандла. Для этого в файле src/Blog/BlogBundle/Resources/config/routing.yml пишем так:
    1. blog:
    2. pattern: /blog
    3. defaults: { _controller: BlogBundle:Blog:index }
    4. one_blog:
    5. pattern: /blog/{id}
    6. defaults: { _controller: BlogBundle:Blog:oneBlog }
    Таким образом фреймворк знает, что у нас есть виртуальный путь /blog , для обработки которого нужно использовать контроллер Blog из бандла Blog. И главной функцией класса Blog будет функция index. И также есть URL вида blog/ , по которому мы сможем достучаться до конкретного блога, передав его айдишник. Имейте ввиду, что я опускаю такие слова как Bundle,Controller и Action в именах классов и функций.
Таким образом мы настроили простейший роутинг и создали заготовку бандла. Теперь в неё осталось поместить файлы с темизацией, подключить к БД и добавить возможность создавать, редактировать и удалять блоги. И у дальнейший обвес по желанию.