Jobeet. День первый. Начало проекта

Приветствуем!

Хотите что-то написать?

Нужно назвать себя.

Если вы пришли в первый раз,
то нужно зарегистрироваться.

Читайте нас в:

Блог на ya.ru
Блог на Деловом квартале
Блог на Twitter.om
Блог на Livejournal.com
04 декабря

ПереводыJobeet. День первый. Начало проекта

Вступление

Jobeet. Symfony.Фреймворк symfony был Open-Source проектом на протяжении трёх лет и стал одним из самых популярных фреймворков, благодаря своим способностям и велликолепной документации. Эта традиция зародилась давным давно.

В декабре 2005, сразу после первого официального релиза symfony, мы опубликовали "учебник Askeet", набор из 24 уроков 24, публикуемых ежедневно между началом декабря и рождеством.

Данный учебник стал бесценным инструментом для донесения фреймворка новым адептам. Огромное количество разработчиков научились работать с symfony благодапя askeet, и до сих пор большинство компаний используют askeet как учебный материал.

Мы празднуем выход symfony 1.2 и учебник askeet стал уже староват. Пришло время для нового, свежего учебника!.

Знакомьтесь, Jobeet, учебник-каледнарь 2008!

Вызов

Всё верно, мы сделаем это вновь. Каждый день, в том числе и в выходные, будет публиковаться новая глава учебника. На каждый урок не должно уходить более одного часа и станет тем нечто, при помощи которого можно будет создать настоящий вебсайт, от начала и до конца.

24 раза по одному часу - это один полный день, и это тот максимум, который, как мы считаем нужно потратить на изучений основ symfony. Каждый день бы будем добавлять новые веши в наше приложение. Мы так же познакомим вас с новыми функциями symfony и дадим хорошую практику для веб разрабочика.

В askeet 21ый день был "найми-гуру-симфони-на-день". В этот день ничего не планировалось и мы лишь принимали предложения по внесению различных фич в askeet. Это был успех и сообщество решило что нам нужен поисковый движок в данном приложении И мы его сделали. День 21 учебника был одним из самых популярных.

А в Jobeet, мы будем праздновать на 21ый день зимы "День дизайнера". После четвёртого дня, у вас буде вся необходимая информция по HTML и CSS и вы сможете создать дизайн для публичного релиза Jobeet. Так что, если вы работаете дизайнером и ваша компании имеет отдел дизайна, то мы сможете поделиться с нами дизайном. В 21ый день, мы создадим опросник и сообщество должно будет определить стандартный дизайн, с которым будет поставляться Jobeet. Конечно же вас внесут в список разрабочиков и получите славу!


А этот учебник какой-то не такой

Окунёмся в прошлое и вспомним php4 О-ла-ла, Belle Epoque! PHP был один из первых языков, направленных на веб и самых простым в изучении.

Но так как веб технологии эволюционируют с каждным днём, веб разрабочики должны быть близки к последним практическим вещам и инструментам. Самый лучший способо не отстать - читать блоги, учебники, книги. Мы уже достаточно прочитали всего этого, независимо от того написаны ли они для PHP, Python, Java, Ruby или Perl, но многим из них очень не хватает примеров кода - их слишком уж мало.

Наверное вы читали подобное предупреждение:

"Не забудьте добавить валидацию и проверки на ошибки в реальном приложении."

или

"Безопасность отдаётся на личное изучение читателя"

или

"Конечно вам придётся писать тесты"

Чаво? Эти вещи вам не игрушка. Да это, возможно, наиважнейшая часть всего исходного кода!. И как читателя вас оставляют наедине с собой. Без понимания данных принципов примеры куда более бесполезны. Их нельзя использовать как точку отсчёта. И это плохо! Почему? Потому что безопасность, валидация и управление ошибками, а так же тесты (и это ещё не всё) приведут вас к верному коду!

В данном учебнике вы никогда не увидите подобные изречения и мы будет писать тесты, обрабатывать ошибки, валидировать код и мы будет уверены в том что создаём защищённое приложение. Symfony это не просто код, но ещё и отличная практика для тех, кто создаёт профессиональные веб-приложения для предприятий. Мы сможет предоставить наивысший комфорт, т.к. symfony вобрал в себя все необходимые инструменты для программирования данных аспкетов: легко и без созданий тонн кода.

Валидация, управление ошибками, безопасность и тесты это главные жители symfony, так что у нас не уйдёт на объяснение всего этого много времени. Это лишь одна из многих причин, почему стоит использовать фреймворк для "живых" проектов.

Весь код, которые вы здесь увидите, вы можете использовать для реального проекта. Не бойтесь копировать и вставлять кусочки кода или вовровать целые его цепочки.


The Проджект

Новым разрабатываемым приложением мог стать опять какой-нибудь блоговый движок. Но хочется использовать symfony в полезном проекте. Наша цель - показать, что symfony может использоваться для разработки профессиональных приложений со стилем, приложив немного усилий.

Содрежимое следующего дня оставим пока в тайне. Сегодя у нас и так много дел. Тем не менее вы уже знакомы с именем приложения: Jobeet.


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

24 часа это огрмное количество времени для разработки приложения на symfony. Сегодня PHP код мы писать не будет. Но и без единой строки кода вы сможете уловить все прелести использования фреймворков, таких как symfony, всего лишь развернув новый проект.

Целями дня является: создать среду разработки и отобразить страницу приложения в браузере. Это включает в себя установку symfony, создание приложения и конфигурация веб-сервера.


Требования

Для начала убедитесь, что у вас уже есть готовая среда для разработки с веб-сервером (например Apache), базой данных (MySQL, PostgreSQL, или SQLite) и PHP 5.2.4 или позднее на борту.

Раз нам придётся часто использовать командную строку, то лучше использовать Unix-like ОС, но если вы работаете под Windows - всё будет работать отлично, просто придётся ввести несколько команд в cmd.

Консольные команды Unix могут весьма пригодиться в среде Windows. Если вы хотите использовать такие инструменты как tar, gzipили grep на Windows, то вы можете установитьCygwin. Официальная документация немного размазана, так что более понятный вариант можно найти тут. Исследователи так же могут попробовать Windows Services for Unix.

Так как данный учебник по большей части фокусируется на фреймворке symfony, то мы смеем предположить что у вас уже есть базовые знания по PHP и Объекто-ориентированному программированию


Установка Symfony

Для начала откройте директорию, в которой будет расположен проект Jobeet:

$ mkdir -p /home/sfprojects/jobeet
$ cd /home/sfprojects/jobeet

На Windows:

c:\> mkdir c:\development\sfprojects\jobeet
c:\> cd c:\development\sfprojects\jobeet

Пользователям Windows рекомендуется устанавливать symfony в путь, не содержищий пробелов. Старайтесь не использовать папкуDocuments and Settingsа так же в папке My Documents.

Создайте каталог, в которой будут храниться библиотечные файлы symfony:

$ mkdir -p lib/vendor

Чтобы установить Symfony скачайте архив, лежащий на сайте symfony. Раз данный учебник написан под symfony 1.2, то стоит скачать самую свежую стабильную версию.

Под разделом "Source Download", вы найдёте .tgz архив или же архив в формате .zip. Скачайте архив в свежесозданный каталог lib/vendor и распакуйте его:

$ cd lib/vendor
$ tar zxpf symfony-1.2-latest.tgz
$ mv symfony-1.2.0 symfony

Под Windows разарзивация может быть сделана через обозреватель. После того как вы переименуете каталог в, symfony, там вы должны будете увидеть c:\development\sfprojects\jobeet\lib\vendor\symfony.

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

$ cd ../..
$ php lib/vendor/symfony/data/bin/symfony -V

Под Windows:

c:\> cd ..\..
c:\> php lib\vendor\symfony\data\bin\symfony -V

Если вам не терпится узнать что же может эта командная строка, вы можете попросить symfony показать список доступных задач и опций:

$ php lib/vendor/symfony/data/bin/symfony

Под Windows:

c:\> php lib\vendor\symfony\data\bin\symfony

Командная строка symfony - лучший друг веб-разработчика. Он несёт в себе множество функций, которые могут ускорить вашу производительность за счёт таких ежедневных задач как очистка кеша, генерация кода и многое дргое.


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

В symfony, приложения(applications), имеющие общую модель данных группируются в проекты (projects). Для проекта Jobeet, мы создадим 2 приложения: frontend и backend.


Создание проекта

Из каталога jobeet запустите symfony задачу generate:project, для того чтобы создать проект:

$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet

Под Windows:

c:\> php lib\vendor\symfony\data\bin\symfony generate:project jobeet

Задача generate:project создаёт стандартную структуру каталогов и файлов, необходимых для приложения:

Каталог Описани
apps/ Содержит все приложения проекта
cache/ Кэш фреймворка
config/ Конфиг файлы фреймворка
lib/ Библиотеки и классы проекта
log/ Логи фреймворка
plugins/ Установленные плагины
test/ Файлы для юнит и функционального тестирования
web/ Корневая папка с веб-файлами

Почему symfony создаёт столь много файлов? Главным преимуществом фреймворка является его стандартизация. Благодаря стандартной структуре файлов и папок symfony, любой программист с небольшими знаниями по symfony сможет осуществелять поддержку проекта. За считанные минуты он сможет погрузиться в код, начать править ошибки и добавлять новый функционал.

Задача generate:project так же создала ярлык symfony в корневом каталоге проекта Jobeet для уменьшения количества символов, набираемых для запуска задачи.

Отныне, вместо того чтобы писать полный буть, мы будет пользоваться ярлыком symfony.


Создание приложения

Теперь создадим frontend приложения при помощи задачи generate:app:

$ php symfony generate:app --escaping-strategy=on --csrf-secret=Unique$ecret frontend

Так как файл symfony исполняемый, пользователи Unux могут заменить 'php symfony' на './symfony'

Под Windows вы можете скопировать файл 'symfony.bat' в свой проект и использовать 'symfony' вместо 'php symfony':

c:\> copy lib\vendor\symfony\data\bin\symfony.bat .

Ещё разик - задача generate:app создаёт стандартную файловую структуру для приложения, которое лежит в apps/frontend:

Каталог Описание
config/ Конфиг файлы приложения
lib/ Классы и библиотеки приложения
modules/ Код приложения (MVC)
templates/ Глобальные шаблоны приложения

Все комнады symfony должны исполнятся в каталоге с проектом, пока не было сказано обратное.

Вызывая задачу generate:app мы применили 2 опции:

  • --escaping-strategy: предотвращаем XSS атаки
  • --csrf-secret: использует ключи сессии для предотвращения CSRF атак

Передавая два данных аргументы задаче, мы обезопасили нашу дальнейшую разработку от двух наиболее распространённых уязвимостей, известных вебу. Всё верно, symfony автоматически будет проверять безопасность в нашу пользу.

Если вы ничего не слышали о XSS или CSRF, то советуем найти время и почитать о данных уязвимостях.


Путь к symfony

Вы можете узнать текущую версию symfony набрав:

$ php symfony -V

Опция -V так же отобразит путь к установленной symfony, который можно так же найти в config/ProjectConfiguration.class.php:

// config/ProjectConfiguration.class.phprequire_once '/Users/fabien/work/symfony/dev/1.2/lib/autoload/sfCoreAutoload.class.php'

Для большей совместимости замените абсолютный путь на относительный:

// config/ProjectConfiguration.class.phprequire_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'

Теперь мы можем спокойно двигать наш проект на любое место на нашем диске или создать новый - всё будет работать


Окружения

Если вы загляните в папку web/, то там обнаружите 2 PHP файла: index.php и frontend_dev.php. Это так называемые фронт-контроллеры (front controllers): все запросы к приложению идут через них. Но почему же у нас 2 фронт-контроллера? Приложение то мы создавали одно!

Оба этих файла указывают на одно и тоже приложение, но на различные окружения. Во время разработки приложения, кроме случаев когда вы копаетесь прямо на внешнем сервере с готовым приложением, вам нужно несколько окружений:

  • Окружение разрабоики: это окружение используется веб разрабочиками для добавления новых фич, правки ошибок, ...
  • Тестовая среда: Она используется для проведения автоматических тестов.
  • Промежуточная среда: Данная среда используется заказчиком для тестирования приложения и обнаружения ошибок или отсуствующих функций.
  • Пользовательская среда: С этой средой работает конечный пользователь.

Что делает среду уникальной? В окружении разработки приложению нужно записывать все детали по каждому и запросов для простоты отладки, оно должно отображать исключения в браузере, а система кеширования должна быть отключена, т.к. все изменения должны быть видны незамедлительно. Поэтому окружение разработки должно быть заточено для разработчика:

Исключение в окружении разработки

Но в окружении пользователя доджны выводиться настраивемые сообщения об ошибок заместо сухих исключений и, конечно же, там должен работать кеш. Поэтому пользовательская среда должна быть оптимизирована для большей скорости работы и лёгкого понимания пользователем.

Исключение в оркужении пользователя

Окружение symfony это уникальный набор настроек и они встроены в наше фреймворк:dev, test и prod.

Если вы взглянете в код фронт-контроллера, то вы увидите разницу настроек окружений :

// web/index.php<?php require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php')$configuration =➥ ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);sfContext::createInstance($configuration)->dispatch()

Определение нового окружения делается так же легко, как и создание нового фронт-контроллера. Позже мы узнаем, как же поменять настройки окружения.


Настройка сервера: Ужасный путь

В предудщей части мы создали каталог, в котором будет гнездиться наш проект Jobeet. Если вы создали этот в корневом каталоге вашего веб-сервера, то вы уже можете посмотреть на проект при помощи браузера.

Конечно, когда конфигов нет, то и устанавливать проще. Но давайте всё таки откроем файл config/databases.yml в вашем браузере, чтобы понять суть всей хреновости такой вещи как лень.

Никогда не используйте такой тип установки на внешней площадке и прочитатйте следующую часть, для того чтобы настроит сервер правильно.


Настройка сервера: Безопасный путь

Хорошим тоном будет держать в открытом доступе только те файлы, которые нужны браузер: стили, JavaScript'ы или картинки. А так же мы рекомендуем держать данные файлы в под-деректориях каталога web.

Если вы уже заглянули в данную директорию, то значит увидели некоторые подкаталоги для веб файлов, а так же 2 фронт-контроллера. Фронт-контроллеры это единственные php-файлы, которые должны находиться в каталоге web. Все остальные PHP файлы должны быть скрыты от браузера для достижения ещё большей безопасности.


Конфигурируем веб-сервер

Самое время изменить конфиги Apache для того чтобы открыть наш проект всему миру.

Найдите и откройте файл httpd.conf и добавьте в конце следующие строки:

# Убедитесь что эта строка отображается лишь однажды
NameVirtualHost 127.0.0.1:8080

# This is the configuration for Jobeet
Listen 127.0.0.1:8080

<VirtualHost 127.0.0.1:8080>
DocumentRoot "/home/sfprojects/jobeet/web"
DirectoryIndex index.php
<Directory "/home/sfprojects/jobeet/web">
AllowOverride All
Allow from All
</Directory>

Alias /sf /usr/local/symfony/data/web/sf
<Directory "/usr/local/symfony/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>

Алиас /sf даёт доступ к картинкам и javascript'ам необходимым для правильного отображения панели отладки.

На Windows, строку с директивой Alias стоит заменить чем-то вроде этого:

Alias /sf "c:\development\symfony\data\web\sf"

/home/sfprojects/jobeet/web нужно заменить на:

c:\development\sfprojects\jobeet\web

Данная конфигурация позволяем слушать порт 8080 на вашей машне, так что проект Jobeet будет доступен по адресу:

http://localhost:8080/

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


Тестируем новую конфигурацию

Перезагрузите Apache и проверьте доступ к вашему приложению, открыв в браузере http://localhost:8080/index.php/ или http://jobeet.localhost/index.php/, в зависимости от того какую конфигурацию Apache вы выбрали.

Congratulations

Если у вас установлен модуль mod_rewrite вы можете удалить /index.php/ из ссылок, данных выше.

Так же стоит проверить работспособность окружения разработки. Используйте следующую ссылку:

http://jobeet.localhost/frontend_dev.php/

В правом верхнем углу должна показаться панель отладки, на которой размещены маленький икноки. Это доказывает что алиас sf/ работает отлично.

web debug toolbar

The setup is a little different if you want to run symfony on an IIS server in a Windows environment. Find how to configure it in the related tutorial.

Subversion

Хорошим тоном является использование контроля версий при создании веб приложений. Использование контроля версий даёт нам:

  • быстро работать
  • вернуться к предущей версии, если что-то поломалось
  • эффективную работу команды разрабочиков
  • доступ ко всем удачным версиям приложения

В данной части мы расскажем как пользоваться Subversion. Если вы используете другой инструмент контроля версий, то будет весьма легко адаптироваться под Subversion.

Мы надеемся что у вас уже есть доступ к серверу Subversion.

Если у ещё нет в распоряжении сервера Subversion, то вы можете воспользоваться одним из таких на Google Code или просто погуглить "free subversion repository".

Для начала создадим каталог для проекта jobeet:

$ svnadmin create http://svn.example.com/jobeet
$ svn mkdir -m "created default directory structure"
http://svn.example.com/jobeet/trunk
http://svn.example.com/jobeet/tags
http://svn.example.com/jobeet/branches

Затем удалите всё из cache/ и log/ - их содержимое нам в репозитории не нужно.

$ cd /home/sfprojects/jobeet
$ rm -rf cache/*
$ rm -rf log/*

Теперь убедитесь, что права на cache и log стоят нужные - web server должен в них свободно писать:

$ chmod 777 cache
$ chmod 777 log

Итак, делаем первый импорт:

$ svn import -m "made the initial import"
http://svn.example.com/jobeet/trunk

Т.к. файлы из cache/ and /log нам не нужны, стоит прописать игнорирование:

$ svn propedit svn:ignore cache

Должен запустить текстовый редактор, настроенный на работу с svn. Subversion должен игнорировать любой контент в данном каталоге:

*

Сохраняемся и закрываем. Вот и всё.

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

$ svn propedit svn:ignore log

И введите:

*

И теперь отправим изменения в репозиторий:

$ svn import -m "added cache/ and log/ content in the ignore list"

Пользователи Windows могут использовать замечательный клиент TortoiseSVN для управления своим репозиторием.

SVN репозиторий Jobeet будет с каждым днём будет доступней.

И хотя пока ещё не весть репозитарий доступен (http://svn.jobeet.org/), сегодняшний код был выложет и теггирован.

Вы можете проверить release_day_01:

  $ svn co http://svn.jobeet.org/tags/release_day_01/ jobeet/


Увидимся завтра!

Ну чтож, на сегодня всё! Хотя мы даже ещё и начали говоришь про symfony, мы создали крепкую среду для разработки, мы поговорили о лучших вещах веб-разработки и готовы программировать.

Завтра мы узнает что будет делать приложения и начнём погружаться в symfony. Между делом, если вы хотите следить за всеми последними новостями по Jobeet не забудьте подписаться rss ленту по symfony.

Ждём вас завтра!

Коментарии:

Vic 2008-12-06 13:09:35

Неточность:

Сторки:
Alias /sf /usr/local/symfony/data/web/sf


нужно заменить на (иначе не работает):

Alias /sf /home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf


Попозже пришлю еще исправления

ответить
Vic 2008-12-06 15:34:30

с Subversion пока только начал знакомство, то код, приведенный выше

$ svnadmin create http://svn.example.com/jobeet

выдает ошибку:
svnadmin: 'http://svn.example.com/jobeet' is an URL when it should be a path

заработала такая конструкция ( правда, пока не могу утверждать, что это правильно )
small# /usr/local/bin/svnadmin create /var/src/svnrepository/jobeet
small# svn mkdir -m "created default directory structure" http://svn.example.com/jobeet
svn: OPTIONS of '/svn': 200 OK (http://svn.example.com)

у меня http://svn.example.com заменен на мой сервер

ответить
maddogg 2008-12-06 18:41:23

переводил в глубоком анабиозе уже. Svnadmin точно нужно передавать пути локальные. Попозже исправлю.

ответить
fruit.dev 2008-12-06 21:36:18

я бы всё, что связанно с SVN, пропускал…

ответить
Vic 2008-12-07 04:35:33

Я так и сейчас и делаю. А вообще сейчас стал читать оригинал, там все уже до 6 дня дошло. Мне понравилось. У меня это первый framework. Думаю, буду пользоваться.

ответить
maddogg 2008-12-06 18:38:43

эти строки рассчитаны просто напросто на pear устнаовку (почему её не взяли за основу - мне не ясно, с pear работать проще).
Тут уж какие дали строки, собственно говоря. Попозже изменю, как голова освободится

ответить
Nas 2009-02-26 00:21:52

здесь должен бить путь к файлам фреймворка. Я ставил с помощю pear на debian lenny у меня етот путь был /usr/share/php5/symfony/data/web/sf

так што смотрите у себя.

и ещьо у меня в зост било прописано IP 192.168.0.2 и тогда frontend_dev.php не грузится. Всьо можно исправить в самом фале frontend_dev.php просто заменить IP из 127.0.0.1 на нужний в моем случае 192.168.0.2

PS Простите за плохой русский.

ответить
VolCh 2008-12-29 22:30:47

Вопрос не по существу, а переводы вычитывались? Или перевод "на лету" и сразу постинг? Ошибки и опечатки буквально с первого предложения:
велликолепной
набор из 24 уроков 24
благодапя
у вас буде вся
способо
вовровать
огрмное
Объекто
разарзивация
писать полный буть, мы будет пользоваться
работспособность
на которой размещены маленький икноки

Список не полный, устал, да и неудобно в браузере. В остальных "днях", увы, не лучше. И это не учитывая грамматические ошибки и ошибки перевода, некоторые фразы очень сложно понять без заглядывания в оригинал :(

А вот вопрос по существу (по symfony) - есть ли способ запускать "утилиты командной строки" из браузера на удаленном сервере? Поднимать дома сервер нет желания, все равно конфигурация от рабочей будет отличаться, а многие хостеры ssh доступ не дают, чтобы скрипты запускать напрямую. Для другие фреймворков с CLI встречал подобные решения


ответить
maddogg 2009-01-11 00:41:07

Есть у меня одно и самое главное нехорошее свойство - пишу я как промпт часто. Даже в обычном диалоге в чате/icq. Ничего с этим не могу поделать, видимо такая у меня прошивка. Если есть ошибки - велком в комментарии, будем скорей всего править - после перевода бесполезно перечитывать - глаза намыливаются и ничего уже не замечается, к тому же перевожу уже в 2-3 ночи :)

Способов таких не видел, да и не к чему. Разработка в любом случае ведётся не на продакшн сервере (а если и так - то зря). А тех хостеров, которые не дают SSH - гоните в шею. Которые не имеют svn, pear - тем более. В конце концов развернуть всё можно и на vds, если проект того стоит.

ответить
roman 2009-05-20 19:16:02

в этом абзаце надо глагол «будет» поставить в правильном спряжении:
«В данном учебнике вы никогда не увидите подобные изречения и мы будет писать тесты,
…»

ответить
}{-key 2009-09-09 14:55:15

Начал ознакамливаться с Симфони с нуля. И в первом же уроке возникли вопросы. Например: в командной строке пишется *php …*, на что мне выдает *php — не является внутренней командой*. Скачал PHP (подсказали), он сам прописал в системе путь и все заработало. Сам бы до этого точно не догадался. Дальше — хуже. Скачал TortoisSVN, сам попробовал прописать путь к нему в Переменных средах, но команда так и не распознается. С MySQL то же самое. В конце вообще шли одни команды под Unix (надеюсь хоть по аналогии под DOS можно написать).
Все это я к чему: Можно было ли добавить свои комменты и советы, вносящие ясность в происходящее, а не сухой перевод?
Был бы очень признателен.

ответить
gost1k 2009-09-28 13:42:42

По сути об ознакомлении, лучше сначало статью прочитать по установке apache php mysql и желательно perl… можно взять от сюда http://zendframework.ru/articles/zend_framework_start но + к этому придется дополнительно в php расшаривать XLS и еще пару модулей…

ответить
gost1k 2009-09-29 15:12:34

А вообще оптимальный вариант linux

ответить

Свой комментарий: