"Спросика" — учебное пособие по Symfony Framework

Original author: Fabien Potencier
  • Translation

Вызов (от переводчика)


Symfony — это один из тех фреймворков на PHP5, который привлекает своей достаточной документацией, множеством плагинов, обновлениями, анонсами новых версий и многим другим.
К сожалению документации на русском языке пока мало. Многие зарезервированные доменты вроде http://symfony-project.ru/ лишь имею одну фразу — «Скоро будет». И причём уже давно.
На самом проекте  http://symfony-project.org/ в разделе документации можно увидеть наш триколор только в разделе «Cookbook».
Итак, я бросаю вызов и намереваюсь заняться переводом. API переводить думаю смысла нет, книга — слишком объёма пока что для меня (но это временно явление, возьмусь может и за неё). А переводить мы начнём Askeet Tutorial. Если первый перевод примут — буду перводить дальше. Каждый день не обещаю, но постараюсь в будние дни по статье выкладывать


Вызов (от автора)


Предрождественнский календарь symfony это набор из 24 уроков, публикуемых ежедневно с 1 декабря и до наступления рождества. Всё верно, каждый, включая выходные, будет публиковаться новый урок. Каждый урок не должен занимать более часа и даст нам возможность наблюдать за продвигающейся разработкой Web 2.0 приложения от А до Я. В рождество финальная версия приложения появится в онлайне, а исходный код будет открытым. Приложение будет практичным, интересным, полезным и забавным.
24 раза по часу это сутки и это максимум времени, по нашему мнению, которое программист должен потратить на изучение symfony. Каждый день в приложение будут добавляться новые возможности и главным преимуществом данной разработки является рассмотрение преимуществ функционала symfony, ровно так же как и получение хорошей практики в разработке веб-приложений на symfony. Каждый день вы будете сознавать насколько быстро и эффективно разрабатывать веб-приложение на symfony… И вы будете хотеть знать больше.
Учитывая, что не будет достаточно справиться лишь с этим и учитывая что мы ленивые чуваки — у нас ничего не запланировано на 21 день — зимний сезон. В чём суть? Что потребует сообщество, то мы и добавим в приложение в этот день. Без подготовки. И заставим это работать. Это будет день «найми-symfony-гуру-на-день».


The Проджект


Разрабатываемое приложение может быть обычным «покажи-и-расскажи», список задач (to-do list),  телефонная книга или книжный магазин. Но мы хотим использовать symfony в оригинально проекте, полезном, с кучей фишечек и рюшечек и серьёзным размером. Наша задача — доказать, что symfony может быть использован в сложных ситуациях, в разработке профессиональных приложений со своим стилем и изюминкой.
Мы надеемся что люди будут использовать приложение, чтобы показать что проект на symfony может выдерживать серьёзные нагрузки. Поэтому приложение должно быть актуальным и отвечать существующим потребностям или создать новые. Запуск сайта будет реальной проверкой на прочность. Вы нам понадобитесь, уважаемые читатели, для того чтобы копать/лазить/чатиться на сайте и обсуждать смысл жизни, чтобы проверить максимальную нагрузку.
Суть проекта мы сохраним для следующего дня. У нас не мало работы и без описывания полноценного Web-2.0 приложения. Тем не менее имя необходимо. Назовём его «Спросика» (Askeet).

Что у нас сегодня?


Задачами на сегодня являются: отобразить страницу приложения в браузере и сконфигурировать профессиоанальную среду разработки.
Это будет легко для тех, кто уже читал другие уроки и не слишком сложно для остальных. И каждый найдём для себя что-то новое.
Преположим, что вы используете Unix систему с установленными Apache, Mysql и PHP5. Если вы работаете под Windows — не стоит паниковать. Всё будет отлично работать, просто придётся ввести несколько дополнительных директив в коммандной строке.
Команды Unix могут быть очень полезны в Windows. Если вы хотите использовать инструменты вроде tar,  gzip или grep — в Windows — установите Cygwin. Официальная документация немного разроненна, хороший гайд может быть найден здесь. Экстремалы так же могу попробовать Сервисы Windows для Unix.



Установка Symfony


Самый простой способ — использовать пакет PEAR. Тем менее, чтобы использовать каналы и получить доступ к каналу symfony, вам придётся апгрейдить PEAR до версии 1.4.0 или более (если вы конечно не используете PHP5.1.0, в нём уже есть PEAR 1.4.5)
$pear upgrade PEAR
Есть проблемы с использованием PEAR? Прочтите главу Running Symfony.
Теперь вы можете добавить канал 'symfony':
$ pear channel-discover pear.symfony-project.com
Теперь вы готовы к установке symfony и всех зависимостей:
$ pear install symfony/symfony
Если интересует определённая версия:
$ pear upgrade symfony/symfony-1.0.11
А так можно проверить установлена ли symfony и посмотреть её версию (-V заглавная)
$ symfony -V
Если интересны возможности коммандной строки symfony — наберите $symfony -T и увидите список доступных опций. Так же вы можете прочитать Running Symfony и узнать как устанавливается symfony из tgz или репозитория svn. В коммьюнити так же описывается не-PEAR способ установки в symfony wiki.


Установка проекта


В symfony приложения имеющие общие модели данных выносятся в проекты. В проекте «Спросика» будет реализованы backend(админка) и frontend(сам сайт) — это 2 приложения. Проект является основой приложений и должен быть создан первым. Всё что вам нужно это папка проекта и коммандная строка:
$ mkdir /home/sfprojects/askeet
$ cd /home/sfprojects/askeet
$ symfony init-project askeet

Пор создать frontend для для symfony:
$ symfony init-app frontend
Ухты как быстро.
Пользователям Windows настоятельно рекомендуем хранить проекты с путями, не содержащими пробелы.



Установка веб-сервиса


Теперь пришло время внести изменения в конфиг Apache, чтобы сделать проект доступным. Весьма рекомендуется создавать приложение на виртуальном хосте, чем мы и займёмся.
откройте файл httpd.conf в вашей папке конфигурации Apache и добавьте следующее:
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
  ServerName askeet
  DocumentRoot "/home/sfprojects/askeet/web"
  DirectoryIndex index.php
  Alias /sf /usr/local/lib/php/data/symfony/web/sf 
<Directory "/home/sfprojects/askeet/web">
 AllowOverride All

</Directory>
</VirtualHost>



Алиас sf должен указывать на путь к symfony в папке PEAR. Чтобы определить его введите pear config-show. Приложения на Symfony должны иметь доступ к этому каталогу, чтобы использовать некоторые изображение и js файлы для правильного отображения панели дебага и ajax хелперов

В Windows Alias нужно заменить этим:
Alias /sf "C:\php\pear\data\symfony\web\sf"
Если ничего не работает, возможно стоит добавить права для алиасированной папки /sf. Код ниже из рабочей копии Windows WAMP:
NameVirtualHost 127.0.0.1:80

<VirtualHost 127.0.0.1:80>
 ServerName askeet
 DocumentRoot "C:/sfprojects/askeet/web"
 DirectoryIndex index.php
 Alias /sf "C:/wamp/php/PEAR/data/symfony/web/sf"
 <Directory "C:/sfprojects/askeet/web">
    AllowOverride All
    Allow from All
 </Directory>
 <Directory "C:/wamp/php/PEAR/data/symfony/web/sf">
    AllowOverride All
    Allow from All
 </Directory>
 </VirtualHost>


Установка доменного имени


Устанавливаем локально доменное имя askeet.
В Linux это делается через файл /etc/hosts. В Windows XP этот файл лежит в C:\WINDOWS\system32\drivers\etc\.
Добавьте следующее:
127.0.0.1 askeet
Если вы не хотите работать с новым хостом просто измените параметр Listen на другой порт. Так вы сможете и дальше использовать домен localhost.


Потестим новый конфиг?


Рестартаните Apache и зайдите по адресу askeet
Если вы видите страницу привествия symfony — можем вас поздравить!
Для доступа в среду разработчика зайдите по адресу:
askeet/frontend_dev.php
В верхней части страницы вы должны увидеть панель отладки и небольшие иконки, доказывающие что конфигурация верна.

Если у вас /frontend_dev.php/ отображается так же как и /index.php/, то скорей всего где-то ошибка в конфигурации http.conf в районе mod_rewrite. А может и просто нужно сделать symfony cc



IIS


Установка на IIS немного отличается от обычной. Найти способ установки можно в этом уроке.


Subversion


Один из главных принципов ленивых чуваков — не беспокоиться за поломку кода. SVN помогает нам:
  • быстро работать
  • вернуться к предущей версии кода, если изменения были не эффективны
  • работать нескольким человекам в комманде
  • иметь доступ к ежедневным изменениям.


мы будем использовать для данных целей Subverstion
Будет считать, что вы уже установили svn-сервер или имеете к нему доступ.


Для начала создадим репозиторий для проекта «Спросика»:
$ svnadmin create $SVNREP_DIR/askeet
$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/askeet/trunk file:///$SVNREP_DIR/askeet/tags file:///$SVNREP_DIR/askeet/branches



Для новичков Subversion. Эти две строки создают репозитарий svn. Вторая строка создаёт структуру каталогов для репозитория.
Весь основной рабочий код будет храниться в trunk. Tags содержит в себе релизы главных версяи (версия 1, версия 2 и т.д.).
Branches содержит код не слишком отличающийся от основного рабочего кода. Очень часто branches сливается обратно с trunk.
Например основная trunk разработка может продолжаться до тех пор, пока новая фича не будет полностью протестирована и пофиксена
в branch. После завершения тестирования branch сливается в trunk со всеми изменениями ответвлённого кода. SVN даёт мощные
инструменты для помощи в этом процессе.


Далее вам нужно сделать первый импорт, минуя временные файлы каталогов cache/ и log/
$ cd /home/sfprojects/askeet
$ rm -rf cache/*
$ rm -rf log/*
$ svn import -m "initial import" . file:///$SVNREP_DIR/askeet/trunk


Для новичков SVN. Четвёртая строка импортирует файл и дериктории «Спросика» в каталог репозитория trunk. Теперь код находится
под контролем версий


Теперь код под контролем версий, но код должен быть получен(проверен) для того чтобы SVN мог следить за изменениями.
Забэкапьте каталог с проектом и используйте checkout SVN для рабочей версии:


$ cd /home/sfprojects
$ mv askeet askeet.origin
$ svn co file:///$SVNREP_DIR/askeet/trunk/ askeet/
$ ls askeet


Если всё впорядке — можете удалить бэкап. Он нам больше не понадобится:
$ rm -rf askeet.origin


Для новичков SVN. Код из trunk теперь находится в нашей рабочей папке askeet/. Этот код мы будет изменять и улучшать.
Со стороны SVN этот код называется «рабочей копией». SVN следит за изменениями в коде при его отсылке (commit)


Осталось настроить лишь один момент. Когда вы отсылаете рабочий код в репозитории, могут так же скопироваться
нежелательные файлы, например из папок cache и log вашего проекта. Поэтому нужно указать игнор-лист для данного проекта:
$ cd /home/sfprojects/askeet
$ svn propedit svn:ignore cache


Должен запуститься стандартный текстовый редактор. А так мы указываем на файлы и папки, которые будут
игнорироваться при коммите:
*
Сохраните и выйдите. Вот и всё.

Повторите процедуру для папки log:

$ svn propedit svn:ignore log

И введите только:
*

Теперь убедитесь что на каталогах стоят верные права, чтобы веб-сервер мог писать в данные каталоги:
$ chmod 777 cache
$ chmod 777 log


Пользователи Windows могут использовать замечательный клиент TortoiseSVN
для управления репозиторием. Но запомните — никогда не удаляйте каталоги через обозреватель Windows.
Используйте меню TortoiseSVN (Rename, Delete), чтобы svn знал, что произошло. Иначе вместо коммита вам придётся
делать апдейт и возвращаться к старой версии.



Ещё увидимся!


Ну вот и прошёл час! Мы говорили и говорили… и… ничего нового не показали будующим приверженцам symfony. Но давайте взглянем на задачи второго дня исследователя symfony:
  • что делает приложение
  • создание модели данны и генерация объекто-ориентированного представления
  • работа с модулем

Надеюсь вы ещё вернётесь к нам!

UPD: По просьбам трудящихся — переведён кусок по SVN
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 36

    +2
    Уверен, что начинать изучать симфони нужно именно с askeet. Всё-таки с ходу там трудно разобратся, а вот потрогать, потаскать поизменять элементы на готовом проекте дают опыт и свободу экспериментирования. Единственное, жаль, что askeet немного устарел, Symfony 1.1 на нем не продемонстрируешь.
      +1
      я думаю что азы можно неплохие получить в любом случае. Те кому понравится — будут копать глубже.
        0
        Я свой проект как начал писать на аскит так с него и не слез :) Удобно, когда есть столько готовых классов и например для простенького 2.0 форума есть все элементы. Да и потенциальных коллег удобно знакомить с кодом не открывая его: смог разобраться в аските — получи репозиторий.
        • UFO just landed and posted this here
            0
            Автор то конечно молодец :) я лишь переводчик…
            • UFO just landed and posted this here
          +1
          я бы даже сказал, что он очень сильно устарел и пользоваться им для ознакомления с симфони довольно опасно, так как это грозит приобретением дурных и очень вредных привычек.

          Я бы всё-же начал перевод сразу с документации к 1.2. Выходные впереди, может быть возьмусь за вводные главы сам…
          • UFO just landed and posted this here
              0
              Мм, если уж начинать изучение symfony, то
              1. а) именно с версии 1.1 (в связи с большим количеством принципиальных изменений)
              2. б) по возможности использовать плагины (навскидку — комменты и тэги). Do not reinvent the wheel, помните?
              0
              Добавил кармы, попробуйте опубликовать в блог «Symfony»
                0
                к сожалению пока не пускает, мало кармы. Видимо всё-таки нужно 5+ как и раньше для публикации в блоги
                  0
                  ан нет :) вышло. Баг суперхабра. Thanks
                  +1
                  В первом абзаце symfony-project.org/ ведет на symfony-project.ru ;-)
                    0
                    Было бы неплохо, если бы перевод был адаптирован под версию 1.1.
                    Спасибо за Ваш труд.
                      0
                      если смотреть в будущее, то, наверное, лучше даже на 1.2 уже ориентироваться (-:
                      • UFO just landed and posted this here
                          0
                          основы создания форм другие
                            0
                            а разве админ-генератор не из 1.0 использует? главу про форму из книги и не убрали, только оговорились что есть новая версия, но в админке используется пока что старая
                              0
                              в 1.2 админ-генератор будет на новых формах.
                      0
                      Кто-то работал и с Zend Framework и c Symfony? Итнересно було бы узнать мнение
                        0
                        что-то хабр побил конфы апача. можно это подрихтовать?
                        (ЗЫ: спасибо за напоминание… давно уже интересно посмотреть на сию симфонию. но всё никак руки не дойдут)
                          0
                          Спасибо за топик! Мне приходилось изучать доки на англицком, а сейчас уже есть переводы. Родной язык всегда милее :)
                            0
                            Спроси-ка
                            • UFO just landed and posted this here
                                0
                                Да надо бы перевести и момент про Subversion. Что бы полная версия перевода была.
                                  0
                                  Subversion хорошо описан в Википедии. Я думаю, что автору лучше сконцентрироваться на процессе создания приложения, чем на описании вспомогательных механизмов. С учетом того, что в самом туториале содержатся ошибки, которые придется исправлять — это важнее.
                                  0
                                  Без паники работа идет! trac.symfony-project.org/wiki/Documentation/ru_RU тут все готовые переводы. Закиньте и ваш туда.
                                    0
                                    Вы знаете, не хочется сгущать краски, но темпы этой работы оставляют желать лучшего, о чем свидетельствует обращение на странице к документации на русском языке.
                                      0
                                      Вот более новый перевод документации по Symfony 3
                                      symfony.com.ua
                                    0
                                    присоеденяйтись www.symfony.org.ua
                                      0
                                      сейчас многие по одиночке начинают переводить туторы, developer.co.ua/posts/view_tag/symfony_book
                                      Было бы неплохо попробовать объеденится
                                        0
                                        они начали переводить самыми первыми, но уже полгода никто ничего не перевдит
                                        0
                                        Автору поста — плюс! Сам в свое время страдал от незнания английского и отсутствия литературы на русском. Спасибо Вам!
                                          0
                                          >Всё верно, каждый, включая выходные…
                                          слово пропустили
                                            0
                                            >работать нескольким человекам в комманде
                                            людям? команде?

                                            +Спасибо за перевод
                                            0
                                            Люди!
                                            Проголосуйте за включение symfony в netbeans!

                                            symfony[dot]org[dot]ua/2008/09/progolosuy-za-vklyuchenie-symfony-v-netbeans- ide/

                                            Only users with full accounts can post comments. Log in, please.