developer.co.ua

Holy Copypasters
25.11.2006
Алексей Гоголев

Symfony — создание проекта 0.20

Итак, symfony установлен — теперь можно приступить к созданию проекта. Рассмотрим структуру проекта. В каждом проекте есть хотя бы одно приложение (application — англ. приложение). В типичном проекте, как правило, есть два приложения — fo (front office, пользовательская часть сайта) и bo (back office, админпанель). Можно использовать и больше приложений, жестких ограничений не существует. Следует отметить, что гиперссылки между приложениями необходимо задавать в абсолютной форме.

Каждое приложение состоит из модулей (module — англ. модуль). Обычно модуль содержит несколько страниц общей тематики. Примеры названий модулей: account, help, home, articles. Модули, в свою очередь содержат action-ы (action — англ. действие). Каждому действию которое можно сделать в модуле, соответствует action. Например, можно узнать сколько денег лежит на карточке, этому действию соответствует action «showBalance».

1. С точки зрения MVC pattern, модуль в Symfony — это Controller.
2. Приведу список переведенных терминов.

Структура проекта


Итого, получилась вот такая иерархия:

1. Проект
2. Приложение
3. Модуль
4. Действие

Приложения можно загружать в разных средах (environment — англ. окружающая среда; далее буду использовать термины «среда» и «режим»). По умолчанию любое приложение можно запускать в трех режимах (средах): режим разработчика (development environment), режим тестирования (test environment), режим пользователя (production environment). Разница между этими режимами в настройках. Например, при запуске в режиме тестирования в логи будут заноситься и alert-ы и error-ы, а в среде пользователя только error-ы. В режиме разработчика кэширование отключено, в остальных режимах — включено. В режиме разработчика в браузере отображается дополнительная информация, упрощающая отладку. Разумеется, это не все отличия между режимами.

Замечание: Если вы установили symfony sandbox, вам не нужно создавать проект и приложение. Sandbox содержит пустой проект «sf_sandbox» и приложение «frontend».

Pake


Помните в статье о установке фреймворка был список пакетов, используемых symfony? Pake автоматизирует некоторые задачи управления проектами, приложениями и модулями. Управление происходит через командную строку — вы вводите команду в командной строке, а Pake ее выполняет.

Советую начать запоминать команды. При работе над проектом, командная строка используется очень часто.
Еще раз напомню команду всех команд (выдает список команд) — symfony -T

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


Прежде всего нужно создать папку где будет помещаться ваш проект. Пусть это будет папка C://projects/myproject. Теперь нужно инициализировать проект. Symfony сгенерирует базовую файловую структуру вашего проекта, вам нужно только ввести нужную команду из созданой директории.

$ cd C://projects/myproject
$ symfony init-project myproject


Если все прошло гладко, то в папке myproject/ должна появиться следующая файловая структура:

apps/
batch/
cache/
config/
data/
doc/
lib/
log/
test/
web/


Если у вас есть особые требования к файловой структуре, не волнуйтесь — symfony можно адаптировать к пользовательской файловой структуре. Все пути, используемые скриптами, определены в файле constants.php.

Запомните, использовать команды нужно только из корня вашего проекта. Если команда будет вызвана из поддиректории вашего проекта, вы увидите сообщение об ошибке.

Cоздание приложения(application)


Проект создан, но он пуст. Неплохо бы создать хоть одно приложение. Это так же просто, как и создание проекта. Назовем наше первое приложение «myapp». Введите команду:

$ symfony init-app myapp


Не трудно догадаться, посмотрев на файловую структуру проекта, что приложения помещаются в директории app/. Команда, которой мы воспользовались, создала приложение (application) «myapp». Появилась папка «myapp» в директории app/, а в ней базовая файловая структура приложения.

apps/
  myapp/
    config/
    i18n/
    lib/
    modules/
    templates/


Также появилось два php-файла в директории web/

web/
  index.php
  myapp_dev.php


Через index.php можно запустить приложение в пользовательском режиме (production environment). Так как вы создали первое приложение, то symfony создал файл index.php, вместо myapp.php (если вы сейчас создадите application с именем «mynewapp», то в папке web/ появиться не index.php, а mynewapp.php). Чтобы запустить ваше приложение в режиме разработчика (development environment) необходимо запустить myapp_dev.php.

Вы должно быть помните что был еще режим тестирования (test environment). Режим тестирования используется для тестирования компонентов приложения и для него не создается php-файл.

Путь к вашему проекту храниться в константе SF_ROOT_DIR, определенной в файле index.php.

Настройка сервера


Посмотреть на новый проект не удастся без правильно настроенного сервера. Ниже пример http.conf (сервер Apache):

VirtualHost is added in the httpd.conf file:
<Directory "/$data_dir/symfony/web/sf">
  AllowOverride All
  Allow from All
</Directory>
<VirtualHost *:80>
  ServerName myapp.example.com
  DocumentRoot " C:/projects/myproject "
  DirectoryIndex index.php
  Alias /sf /$data_dir/symfony/web/sf

  <Directory " C:/projects/myproject ">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>


В этих строках нужно вместо «$data_dir» вписать значение переменной $data_dir. Директории вида $***_dir часть настроек PEAR. Чтоб увидеть значение этих переменных используйте команду:

$ pear config-show


Значения этих переменных по умолчанию указаны в статье Symfony — PHP5 MVC Фреймворк.

Запускаем Apache и теперь можно попробовать загрузить url http://myapp.example.com/index.php/, или в режиме разработчика (development environment): http://myapp.example.com/myapp_dev.php/. Вы должны увидеть страницу с поздравлениями (congratulations page)

Symfony использует модуль mod_rewrite для красивых url. Если ваша версия Apache не скомпилирована с mod_rewrite, проверьте что mod_rewrite установлен и добавьте в httpd.conf следующие строки:

AddModule mod_rewrite.c
LoadModule rewrite_module modules/mod_rewrite.so

Создание модуля


Приложение вышло бедноватое — одна только страница поздравлений. Неплохо будет создать модуль. Для создания модуля снова будем использовать командную строку.

$ symfony init-module myapp mymodule


Myapp —имя приложения, в котором требуется создать модуль. Mymodule —имя модуля. Только что мы создали базовую файловую структуру модуля. В директории modules/ появилась папка mymodule. В директории mymodule находится базовая файловая структура модуля:

modules/
  mymodule/
    actions/
    config/
    lib/
    templates/
    validate/


Теперь можно попробовать загрузить новый модуль: http://myapp.example.com/index.php/mymodule. Вы должны увидеть следующий текст:

Module mymodule
Congratulations!

Модуль работает. Теперь можно его немного поменять. Выведем вместо “Module mymodule Congratulations!” что-то другое. Напишите то, что желаете вывести, в файле myapp/modules/mymodule/templates/indexSuccess.php. Сохраняемся, делаем refresh и наблюдаем изменения.

Надеюсь создание проекта прошло удачно.

1 2 3 4 5

Последние комментарии:

[PLAGUEkriz]
У меня некоторые сложности возникли. К примеру при прописывании виртуального хоста пришлось помучаться: лишние пробелы в кавычках, от этого апач запускаться не хотел. И вместо DocumentRoot "C:/projects/myproject" надо было написать DocumentRoot "C:/projects/myproject/web" иначе ссылки приведенные автором в статье не работают. У меня апач 2.2.8 пхп 5.2.6 возможно от версии зависит. Но в целом статья очень помогла, спасибо автору.

chuwy
Собственно и так тут ничего сложного не вижу, а если поставить Eclipse+symfoclipse, то вообще всё делается в одно нажатие.

А что сложного? Виталий
Мне на винде под Денвером удалось запустить «с пол-пинка». Не понимаю в чем сложность?
Некоторая сложность в написании приложений в том, что если на cakePHP все надо писать на PHP, то здесь многие вещи делаются через конфигурацию (надо помнить что и как конфигурировать, зато не надо писать код).

сложно Genius
по сравнению c cakephp очень сложно настраивать.
Под windows мне вообще кажется немыслимым....

ooou
А дальше? Где про Propel? Это ж самая важная часть..

Обсудить (комментариев: 7)