Pull to refresh

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

Reading time7 min
Views11K
Original author: Fabien Potencier

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


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
Tags:
Hubs:
+35
Comments36

Articles