in Профессиональное

Symfony 2.0 – быстрый тур – общая картинка (часть 1)

Обновление от Августа 2016: перевод документации Symfony 2 на русский опубликован в виде бесплатной книги на сайте Leanpub. Узнать подробности.

Вы хотите попробовать новинку в области web-разработки — symfony 2.0, но имеете на это 10 минуток или что-то около того? Этот курс молодого бойца написан специально для вас. Он рассказывает о том как быстро начать работать с symfony 2.0 и показывает структуру простого проекта. Если вы когда-нибудь использовали какой-либо веб-фреймворк прежде, вы будете чувствовать себя в symfony 2.0 как дома.

Скачиваем и устанавливаем

В первую очередь, убедитесь что у вас установлен и настроен как минимум PHP 5.3.0 и вебсервер (например apache).

Пакет Денвер имеет версию с Php 5.3.1 – для ознакомления в можете использовать его.

Готовы? Скачиваем symfony. Для быстрого старта мы будем использовать песочницу. Это проект, который содержит все необходимые библиотеки и несколько простых контроллеров, а также готовую конфигурацию. Песочница хороша тем, что с ней вы тут же можете начать экспериментировать с symfony.

Качаем песочницу и распаковываем ее в корневую web-директорию. У вас получится примерно следующее:

www/ <- web root директория
  sandbox/ <- распакованный архив
    hello/
      cache/
      config/
      logs/
    src/
      Application/
        HelloBundle/
          Controller/
          Resources/
      vendor/
        symfony/
    web/

В denwer’е в z:home создайте директорию sandbox и распакуйте архив в нее:

z:homesandbox
  hello
  src
  web

Если после этого перезапустить денвер, то проект будет доступен по адресу http://web.sandbox. Если предварительно переименовать директорию web в www то проект будет доступен по адресу http://sandbox.

Проверяем конфигурацию

Для того чтобы избежать головной боли в последствии, проверьте, может ли быть запущен symfony у вас – для этого откройте следующий URL:

# linux
http://localhost/sandbox/web/check.php
# denwer
http://web.sandbox/check.php

Вы увидите примерно следующее:

Аккуратно посмотрите все сообщения об ошибках (если есть) и исправьте. Теперь запросим реальную страничку симфони:

# linux
http://localhost/sandbox/web/index_dev.php/
# denwer
http://web.sandbox/index_dev.php/

Первое приложение

Песочница содержит простое приложение Hello world и мы будем использовать его для того чтобы узнать побольше о симфони. Откройте следующий URL для того чтобы симфони мог поприветствовать вас:

# замените Fabien на ваше имя
# linux
http://localhost/sandbox/web/index_dev.php/hello/Fabien
# denwer
http://web.sandbox/index_dev.php/hello/Fabien

Что происходит в этом месте?

  • index_dev.php – это фронт-контроллер. Это единая точка входа для приложения – она обрабатывает все запросы.
  • /hello/Fabien – это виртуальный путь к ресурсу, который хочет получить пользователь.

Ваша обязанность как разработчика – написать код, который отражает запрос (/hello/Fabien) с соответствующим ресурсом (Hello Fabien!).

Маршрутизация

Как же осуществляется маршрутизация? Читает конфигурационный файл с маршрутами:

# hello/config/routing.yml
homepage:
  pattern:  /
  defaults: { _bundle: WebBundle, _controller: Default, _action: index }

hello:
  resource: HelloBundle/Resources/config/routing.yml

Этот файл написан на YAML, который делает написание конфигурационных файлов очень легким. Все конфигурационные файлы в symfony могут быть написаны на XML, YAML или даже plain PHP. Это руководство использует YAML формат как наиболее простой и понятный даже для начинающих. Конечно же, “энтерпрайз разработчики” могут повсюду использовать XML ))

Первые три строки файл с маршрутами определяет какой код будет вызван когда пользователь запрашивает /. Более интересна последняя строка, которая импортирует другой файл с маршрутами:

# src/Application/HelloBundle/Resources/config/routing.yml
hello:
  pattern:  /hello/:name
  defaults: { _bundle: HelloBundle, _controller: Hello, _action: index }

Как вы можете видеть, шаблон “/hello/:name” (строка которая начинается с “:” это метка, плэйсхолдер) отображается на контроллер, который определен через переменные _bundle, _controller и _action.

Контроллеры

Контроллеры отвечают за возврат значения ресурса (как правило HTML) и определяются как PHP классы:

# src/Application/HelloBundle/Controller/HelloController.php
namespace ApplicationHelloBundleController;

use SymfonyFrameworkWebBundleController;

class HelloController extends Controller
{
  public function indexAction($name)
  {
    return $this->render('HelloBundle:Hello:index', array('name' => $name));
  }
}

Код простой как пять копеек, но разберем его по косточкам:

  • namespace ApplicationHelloBundleController;: симфони использует преимущества PHP 5.3 – все контроллеры находятся в пространствах имен (пространство имен содержит значение _bundle: HelloBundle).
  • class HelloController extends Controller: имя контроллера это объединения значения _controller из маршрута (Hello) и Controller. Он расширяет встроенный класс Controller.
  • public function indexAction($name): каждый контроллер состоит из нескольких действий. Следуя конфигурации, hello page перехватывается действием index (значение _action из маршрута). Этот метод получает имена подстановок в качестве аргументов ($name в данном случае).
  • return $this->render('HelloBundle:Hello:index', array('name' => $name));: метод render() загружает и отрисовывает шаблон (HelloBundle:Hello:index) с переменными, переданными в качестве второго аргумента.

Но что же такое пакет (бандл, bundle)? Весь код symfony организован в виде пакетов. На языке симфони, пакет это структурированный набор файлов (PHP, каскадных стилей, яваскриптов, картинок, …), которые реализуют единичный кусок функционала (блог, форум, … ) и который легко может быть передан другим разработчикам. В нашем случае мы имеем один пакет – HelloBundle.

Шаблоны

Итак, контроллер отображает шаблон HelloBundle:Hello:index. Но что скрыто в имени шаблона? HelloBundle это имя пакета, Hello это контроллер, index это имя файла шаблона. Шаблон по сути это HTML или PHP файл:

# src/Application/HelloBundle/Resources/views/Hello/index.php
<?php $view->extend('HelloBundle::layout') ?>

Hello <?php echo $name ?>!

Поздравляем! Вы разобрались в первом кусочке symfony-кода )) Не так уж и сложно, да? Symfony делает web-разработку более быстрой и приятной.

Окружения

Теперь, когда вы уже лучше понимаете как работает symfony, давайте поближе посмотрим на нижнюю часть страницы. Вы увидите небольшую панель с лого symfony и php:

Это так называемый “Web Debug Toolbar” и он аз есьм лучший друг web-разработчика ))) Конечно же нам не хочется чтобы этот инструмент отображался в продуктовой среде, поэтому мы предусмотрели другой фронт-контроллер в директории web/ (index.php), оптимизированный для продуктового окружения:

http://localhost/sandbox/web/index.php/hello/Fabien

И если у вас есть mod_rewrite – вы можете опустить index.php в URL:

http://localhost/sandbox/web/hello/Fabien

Последним, но не в последнюю очередь, вы не должны давать доступа к директории в которой установлен symfony (из соображений безопасности):

# linux
http://localhost/hello/Fabien
# denwer
http://web.sandbox/hello/Fabien

Для того чтобы разогнать продуктовую среду настолько, насколько это возможно, симфони использует кэш, который хранится в директории hello/cache/. Когда вы делаете изменения, вам нужно вручную удалить файлы кэша. Вот почему вы должны всегда при разработке использовать девелоперский фронт контроллер (index_dev.php).

Последний рывок.

10 минут прошли. Теперь вы можете создать свои собственные маршруты, контроллеры и шаблоны. В качестве упражнения попробуйте собрать что-нибудь более полезное, нежели рассмотренное выше приложение Hello! Но если вы желаете знать больше о symfony – читайте следующую часть руководства, где мы более глубоко залезем в систему шаблонов.

Оригинал тут: http://symfony-reloaded.org/quick-tour-part-1. Если вам будет интересно – буду продолжать перевод. Ваш hudson.

Write a Comment

Comment

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.

11 Comments

  1. Отличный цикл. Спасибо за информацию. НА русском читать о Симфонии гораздо приятнее. Наверное не только мне.
    Как Вы думаете, насколько Симфони 2.0 готов к рабочим проектам, реальным?

    • На мой взгляд не готов. Я несколько недель уже пытаюсь начать интересный лично мне проект на sf2.0, но отсутствие документации очень сильно охлаждаем мой пыл )

      Ну и Фабиен не рекомендует его использовать для продуктовых проектов. Тем не менее он очень просит писать маленькие проектики для того чтобы тестировать и отлаживать новую версию.

  2. А почему ссылки битые на остальные части перевода? Очень хотелось бы ознакомиться.

    • Спасибо ) Ссылки поправил – видимо копипаст подвел 😉 Остальные статьи можно найти также по тегу http://hudson.su/tag/symfony-2-0-quick-tour/ или просмотреть последние 10-15 записей. Все они там будут.

    • Ну во-первых тогда уж ужасный “ручной перевод”.

      Во вторых низачот. Или укажите на ошибки и неточности или, пардон, промолчите =.=

  3. Огромное спасибо hudson! Продолжайте в том же духе, пуду с нетерпением ждать от вас новых статей по симфони. И не обращайте внимания на cuhuak, все написано отлично – понятно и очень легко читаеться.
    Поскорей бы выход симфони 2.0 Stable.

  4. попробовал и получил

    Fatal error: Interface ‘SymfonyComponentsDependencyInjectionLoaderLoaderExtensionInterface’ not found in /var/www/sm/src/vendor/symfony/src/Symfony/Components/DependencyInjection/Loader/LoaderExtension.php on line 24

    наверно я что то делаю не так ;(

    • Спасибо, такие вот комментарии сильно мотивируют что-то делать и дальше )

Webmentions

  • Symfony Reloaded – 2.0 | Блог веб-разработчика 2011/03/28

    […] Symfony 2.0 – быстрый тур – общая картинка (часть 1) […]