Обновление от Августа 2016: перевод документации Symfony 2 на русский опубликован в виде бесплатной книги на сайте Leanpub. Узнать подробности.
Вы хотите попробовать новинку в области web-разработки — symfony 2.0, но имеете на это 10 минуток или что-то около того? Этот курс молодого бойца написан специально для вас. Он рассказывает о том как быстро начать работать с symfony 2.0 и показывает структуру простого проекта. Если вы когда-нибудь использовали какой-либо веб-фреймворк прежде, вы будете чувствовать себя в symfony 2.0 как дома.
- Symfony 2.0 – быстрый тур – вид/the view (часть 2)
- Symfony 2.0 – быстрый тур – контроллер/the controller (часть 3)
- Symfony 2.0 – быстрый тур – пакеты/the bundles (часть 4)
- Symfony 2.0 – быстрый тур – архитектура/the architecture (часть 5)
Скачиваем и устанавливаем
В первую очередь, убедитесь что у вас установлен и настроен как минимум 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.
Отличный цикл. Спасибо за информацию. НА русском читать о Симфонии гораздо приятнее. Наверное не только мне.
Как Вы думаете, насколько Симфони 2.0 готов к рабочим проектам, реальным?
На мой взгляд не готов. Я несколько недель уже пытаюсь начать интересный лично мне проект на sf2.0, но отсутствие документации очень сильно охлаждаем мой пыл )
Ну и Фабиен не рекомендует его использовать для продуктовых проектов. Тем не менее он очень просит писать маленькие проектики для того чтобы тестировать и отлаживать новую версию.
А почему ссылки битые на остальные части перевода? Очень хотелось бы ознакомиться.
Спасибо ) Ссылки поправил – видимо копипаст подвел 😉 Остальные статьи можно найти также по тегу http://hudson.su/tag/symfony-2-0-quick-tour/ или просмотреть последние 10-15 записей. Все они там будут.
простите, ужасный машинный перевод!
Ну во-первых тогда уж ужасный “ручной перевод”.
Во вторых низачот. Или укажите на ошибки и неточности или, пардон, промолчите =.=
Огромное спасибо hudson! Продолжайте в том же духе, пуду с нетерпением ждать от вас новых статей по симфони. И не обращайте внимания на cuhuak, все написано отлично – понятно и очень легко читаеться.
Поскорей бы выход симфони 2.0 Stable.
Late 2010… видимо стоит еще подождать
попробовал и получил
Fatal error: Interface ‘SymfonyComponentsDependencyInjectionLoaderLoaderExtensionInterface’ not found in /var/www/sm/src/vendor/symfony/src/Symfony/Components/DependencyInjection/Loader/LoaderExtension.php on line 24
наверно я что то делаю не так ;(
Отличный перевод, читаю все что есть о симфони 2
Спасибо, такие вот комментарии сильно мотивируют что-то делать и дальше )