Development

Documentation/ru_RU/book/1.1/01-Introducing-Symfony

You must first sign up to be able to contribute.

Version 2 (modified by kmike, 9 years ago)
запятые

Глава 1 - Представляем Symfony

Перевод первой главы "Introducing Symfony" онлайн-книги "Definitive guide to Symfony".

Что необходимо для работы с symfony? Какие возможности обеспечивает symfony? Здесь вы найдете ответы на эти вопросы.

Вкратце о Symfony

Symfony — фреймворк с открытым кодом, полностью написанный на PHP5. Использование фреймворка позволяет создавать более структурированный, читаемый код и упрощает программирование хотя бы потому, что набор сложных операций часто можно заменить одной строчкой кода. Symfony основан на идее MVC (MVC pattern) и создан для упрощения разработки веб-приложений. Фреймворк включает в себя множество инструментов и классов, призванных максимально сократить время разработки сложного веб-приложения. Также symfony автоматизирует наиболее популярные и частые задачи, что позволяет разработчику уделить больше внимания особенностям данного конкретного проекта. Благодаря вышеперечисленным преимуществам, вам не потребуется изобретать колесо каждый раз, когда вы приступаете к разработке нового приложения.

Фреймворк использовался и хорошо себя зарекомендовал во многих проектах (На текущий момент (''2006-10-28'') на symfony построена бета-версия '''Yahoo! Bookmarks'''), в том числе в сложных приложениях е-коммерции. Symfony совместим со многими базами данных (включая MySQL, PostgreSQL, Oracle, и Microsoft SQL Server) и может быть установлен и на *nix и на Windows. Перечислим возможности фреймворка подробнее.

Возможности symfony

Symfony соответствует следующим требованиям:

  • Легко устанавливать и настраивать (конфигурировать) на большинстве платформ (гарантированно работает на *Unix и Windows).
  • Независимость от выбора базы данных.
  • Простота использования в большинстве случаев, и гибкость для решения нетипичных задач.
  • Фреймворк основан на правиле — разработчику необходимо настроить только нетипичные опции (индивидуальные для данного проекта).
  • В рамках symfony применимы большинство лучших методик разработки и шаблонов проектирования.
  • Адaптируем к существующим правилам и стратегиям работы IT-компаний (Enterprise-ready), достаточно устойчив для проектов с длинными сроками.
  • Читаемый и прозрачный код; возможность использования phpDocumentor.
  • При желании функциональность можно легко расширить сторонними библиотеками.

Возможности автоматизирования

В symfony выполнение многих типичных задач автоматизировано:

  • Встроенный слой (layer) для поддержки многоязычности приложения позволяет переводить интерфейс и данные.
  • HTML-страницы строятся из шаблонов (template) и главных шаблонов (layout — общие шаблоны для всех модулей данного приложения). Шаблоны можно делать, не обладая никакими знаниями о фреймворке. Helpers (''англ.'' помощники) — позволяют делать код в шаблонах более читаемым, помещая большие порции кода в одну строчку с вызовом функции.
  • Формы в symfony поддерживают автоматическую валидацию.
  • Приложение защищено от атак путем ввода искаженной информации.
  • Возможности кэширования уменьшают нагрузку на сервер и увеличивают быстродействие.
  • Спецальные средства упрощают управление безопасностью и разграничением прав доступа пользователей.
  • Красивые URL делают строку адреса полезной для поисковых машин и позволяют использовать ее как часть интерфейса.
  • Встроенная поддержка e-mail и средства управления API позволяют веб-приложениям переступать через классические взаимодействия с браузером
  • Есть удобные списки с автоматизированным пейджингом, сортировкой и фильтрацией.
  • Благодаря специальным helper'ам легко создавать интерфейсы на базе AJAX, поддерживающие различные браузеры

Режим разработки (development environment)

Symfony может быть полностью сконфигурирован согласно требованиям различных фирм и компаний, у каждой из которых есть свои правила разработки. По умолчанию фреймворк предоставляет режим разработки (development environment), содержащий множество инструментов для автоматизации наиболее типичных задач:

  • Благодаря возможности генерировать код можно одной командой построить интерфейс администратора.
  • Фреймворк предоставляет инструменты, упрощающие TDD (test-driven development).
  • На панель отладки (debug toolbar) выводится вся информация, необходимая для исправления ошибок.
  • Интерфейс командной строки позволяет адаптировать проект для установки на сервер (production server).
  • Разработчику предоставлена возможность удобно менять настройки фреймворка.
  • Логи (или журналы событий) дают полную картину работы приложения.

Кто создал symfony и зачем?

Первая версия symfony была выпущена в октябре 2005 г. основателем проекта Фабьеном Потенсьером (Fabien Potencier). Fabien — генеральный директор Sensio (http://www.sensio.com/), французской веб-фирмы, известной своими инновационными взглядами на веб-разработку.

В 2003 году Фабьен изучил возможности существующих средств разработки приложений на PHP5 с открытым кодом. Ни одно из них не удовлетворяло перечисленным выше требованиям. Когда же появился PHP5, Фабьен решил, что PHP созрел для написания полнофункционального фреймворка. Позже он потратил год на разработку ядра symfony, взяв в качестве основы MVC pattern, ORM Propel, и helper'ы из Ruby on Rails.

Изначально Фабьен разрабатывал symfony для Sensio. Это дало бы фирме преимущества, поскольку использование фреймворка в работе делает готовые проекты более надежными, а разработку приложений быстрой и интуитивно понятной. После успешного использования фреймворка в приложениях е-комерции и других проектах Фабьен решил сделать symfony проектом с открытым кодом. Он сделал это, чтобы дать возможность другим людям пользоваться symfony, чтобы получить связь с пользователями фреймворка, чтобы поделится опытом Sensio, и потому что open sourсe это весело. :)

NOTE Почему фреймворк назвали symfony? Потому что Фабьен хотел дать фреймворку короткое имя, легко запоминающееся, не ассоциирующееся с другими проектами, содержащее буквы “s” (Sensio) и “f” (framework). Также он не любит большие буквы. “symfony” подходит под все эти требования, не смотря на то, что слово не полностью английское. Другой альтернативой было название “baguette.” (''багет, длинный французский хлеб'')

Для того, чтобы symfony стал успешным проектом, требовалась хорошая документация на английском языке. Фабьен попросил своего товарища François Zaninotto, сотрудничавшего с Sensio, разобраться во фреймворке и написать online книгу о symfony. Это заняло время, но в итоге у symfony появилась замечательная документация, благодаря которой фреймворк стали использовать множество разработчиков. Остальное история.

Сообщество symfony

После того, как был запущен сайт symfony (http://www.symfony-project.com/), многие разработчики скачивали и устанавливали фреймворк, создавали свои первые проекты на symfony. Дело начало набирать обороты. В это время фреймворки для разработки веб-приложений набирали популярность, и потребность в полнофункциональном PHP фреймворке была высока. Symfony предлагал подробную документацию и замечательные решения с высоким качеством кода — два основных преимущества фреймворка. Вскоре появились помощники, которые предлагали различные патчи и улучшения, вычитывали документацию и всячески помогали развитию проекта. Открытый репозиторий с кодом и система ticket'ов (баг-трекер) дали возможность помогать проекту всем желающим. Symfony всегда рад волонтерам. Фабьен продолжает активно разрабатывать фреймворк и гарантирует качество кода в репозитории.

Форум, открытая переписка (mailing lists), и канал IRC чата обеспечивают поддержку пользователей. В среднем на любой вопрос приходится четыре ответа. Каждый день увеличивается число пользователей symfony. Wiki и code snippets (куски кода, которые могут быть полезными) пополняются пользователями фреймворка. Количество приложений, разработанных на symfony, растет в среднем на 5 штук в день. Развитое сообщество — третье преимущество symfony.

Symfony подойдет мне?

Независимо от того, эксперт вы в PHP5 или новичок, вы сможете использовать symfony. Основой определяющий фактор, делать это или нет, — масштабы вашего проекта.

Если вы хотите создать простой сайт с пятью-десятью страницами, доступом к базе данных, и вам не нужно обеспечить сайт документацией и быть уверенным в его надежности, тогда лучше не использовать symfony. Вы мало выиграйте от использования фреймворка, и, возможно, объектная ориентированность кода и идея MVC только понизят скорость разработки. Отметим, что symfony не оптимизирован для работы на серверах, где PHP-скрипты могут быть запущены только в режиме CGI.

С другой стороны, для разработки серьезного веб-приложения со сложной логикой "голого" PHP будет недостаточно. Если вы планируете поддерживать и расширять приложение в будущем и получить неперегруженный и читаемый код, если вы хотите разрабатывать современные интерфейсы с использованием AJAX, и при этом не писать сотни строчек JavaScript, если вы хотите сделать свою работу более легкой и быстрой, тогда symfony вам подойдет.

Если вы профессиональный веб-разработчик и ищите развитый PHP-фреймворк с хорошей документацией и большим сообществом (community), то symfony — для вас.

Можете посмотреть демо-ролики (screencast) на сайте проекта, чтобы убедится, как легко и быстро можно создавать приложения, используя symfony.

Основные концепции

Прежде чем взяться за дело, необходимо понять основные концепции, на которых стоит symfony. Если вы знаете что такое OOP, ORM, RAD, DRY, KISS, TDD, YAML и PEAR, то пропускайте эту часть.

PHP 5

Так как symfony написан на PHP5, программировать вам тоже придется на PHP5. Следовательно, твердое понимание PHP5 крайне желательно, чтобы сделать свою работу максимально эффективной. Минимальной версией требуемой для работы Symfony является PHP 5.1.

NOTE Мне кажется, авторы перегибают в этом месте. Не могу сказать, что когда я начал осваивать symfony, у меня было «твердое понимание PHP5» (прошло меньше полугода после того, как я написал первую строчку на PHP). Несмотря на это, ничего страшного со мной не случилось. Так что не стоит пугаться, если вы не сильно подкованы в PHP. (прим. переводчика)

Разработчикам, которые работали с PHP4, но не работали с PHP5, следует обратить внимание на новую объектно-ориентированную модель языка (object-oriented model).

Объектно-ориентированное программирование (ООП)

Нет, тут не будут поясняться концепции ООП, ведь для этого потребовалась бы целая книга. Так как в symfony активно используются классы, понимание идей ООП необходимо для освоения фреймворка ( Читать об ООП на wikipedia)

PHP5 оперирует такими понятиями как класс, объект, метод, наследование и др. Если вы не знакомы со всей этой кухней, настоятельно рекомендуется почитать документацию (http://www.php.net/manual/en/language.oop5.basic.php) — без этого в symfony и шагу не ступишь.

Magic Methods

Одна из сильных сторон PHP5 — использование magic method'ов (''англ.'' волшебный метод). Это методы, призванные изменить работу классов без правки кода. Наличие magic method'ов делает синтаксис PHP более гибким. Такие методы легко узнать — их названия начинаются с двойного подчеркивания (!__).

Например выводя объект, PHP ищет метод !__toString() данного класса, чтобы узнать, задал ли разработчик свой формат вывода:

[php]
<?php
$myObject = new myClass();
echo $myObject;
// Will look for a magic method
echo $myObject->__toString();

Symfony использует magic method'ы, поэтому рекомендуется ознакомится с их описанием (http://www.php.net/manual/en/language.oop5.magic.php).

PHP Extension and Application Repository (PEAR)

PEAR — это система распространения полезных PHP-компонентов (пакетов, библиотек). PEAR позволяет скачивать, устанавливать, делать upgrade и удалять PHP-пакеты. Используя пакеты из PEAR, вам не нужно волноваться о том, куда что пишется, как устанавливаемые скрипты становятся доступными и т.п. — все это делается автоматически.

PEAR поддерживается сообществом. На сайте проекта (http://pear.php.net/) можно найти документацию и пакеты, сгруппированные по категориям.

Установка через PEAR — наиболее профессиональный путь установки библиотек. Symfony рекомендует использовать PEAR для того, чтобы устанавливаемые пакеты были общими для всех ваших проектов. Plugin'ы для фреймворка — это специально сконфигурированные PEAR-пакеты. Сам фреймворк также доступен как PEAR-пакет.

Вам не нужно в совершенстве знать устройство PEAR для использования symfony. Главное — понимать, что это, и установить его на свой компьютер. Вы можете проверить, установлен ли PEAR, c помощью команды:

> pear info pear

Эта команда должна вывести номер верcии вашего PEAR. Symfony имеет свой канал в PEAR. Отметим, что использование каналов возможно, только если у вас установлен PEAR версии не менее 1.4.0. Если меньше, то вам нужно сделать upgrade, используя команду:

> pear upgrade PEAR

Object-Relational Mapping (ORM)

Базы данных — реляционные. PHP5 и symfony — объектно-ориентированны. Для того, чтобы доступ к базам был объектно-ориентированным, требуется интерфейс, позволяющий перевести объектную логику в реляционную. Этот интерфейс называется object-relational mapping, или ORM.

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

Одно из преимуществ ORM — вам не нужно изучать язык запросов, индивидуальный для каждой базы данных. Операции с объектами автоматически переводятся в запросы, оптимизированные для текущего типа базы данных. Это означает, что перейти на другую базу данных, даже посередине разработки проекта, будет просто.

Еще одно преимущество использования объектов вместо записей и классов вместо таблиц — вы можете определить нужные вам операции. Например, есть таблица Client с полями !FirstName и !LastName. Допустим, вам нужно получать Имя+Фамилия. Благодаря ORM это просто сделать, добавив метод:

[php]
<?php
public function getName()
{
    return $this->getFirstName().' '.$this->getLastName();
}

Все повторяющиеся операции с данными в коде могут быть заменены подобными методами. Еще один пример:

Есть класс !ShoppingCart, с помощью которого вы храните товары (items). Для того, чтобы получить суммарную цену товаров клиента, можно добавить метод getTotal():

[php]
<?php
public function getTotal()
{
    $total = 0;
    foreach ($this->getItems() as $item)
    {
        $total += $item->getPrice() * $item->getQuantity();
    }
    return $total;
}

А теперь представьте, сколько бы времени потребовалось на написание аналогичного SQL-запроса.

Propel — один из лучших ORM для PHP5. Propel встроен в symfony как ORM по умолчанию, так что оперировать данными можно на "объектном языке". В следующих главах будут рассказаны основы синтаксиса Propel, но более детальную документацию можно найти по адресу http://propel.phpdb.org/trac/.

В Symfony 1.1 Propel входит как плагин, что позволяет легко заменить его другой ORM. Если вы хотите использовать в качестве ORM Doctrine, вы должны установить sfDoctrinePlugin.

Rapid Application Development (RAD)

NOTE rapid application development переводится как «быстрая разработка приложений»

Веб-программирование долгое время было скучной и медленной работой. Следуя стратегии полных циклов разработки, к работе не приступали, прежде чем не был сформирован список требований, не нарисовано множество диаграмм (Unified Modeling Language (UML) diagrams) и не написаны тонны документации. Это было обусловлено скоростью разработки (нужно написать, скомпилировать и бог знает что еще сделать прежде чем увидеть программу в действии), и, конечно же, клиентами, которые были более рассудительны и не меняли постоянно свои требования.

Сегодня, когда все процессы в бизнесе очень быстрые, клиенты склонны постоянно менять свои требования по ходу разработки. Конечно же, они ожидают, что разработчики быстро адаптируются к новым требованиям и изменят проект. К счастью, использование таких скриптовых языков, как Perl и PHP, позволяют применить другие стратегии разработки. Например rapid application development (RAD) (синоним — agile development).

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

Основные принципы работы согласно RAD следующие: разработчик не должен думать "в перспективу", когда решает какую-то подзадачу (например, добавляет какой-то функционал). Решение должно быть самое простое из возможных (принцип KISS: Keep It Simple, Stupid. ''англ.'' "делай просто и глупо"). Когда, при следующей итерации, требования поменяются, код нужно будет частично переписать. Это часто случается по ходу разработки. Код перемещают в другие файлы, туда, где им место согласно их сущности (например, все операции с базой данных лежат в одном месте). Повторяющийся код переносится в одно место и заменяется на вызовы функций или методов. (принцип DRY: Don't Repeat Yourself. ''англ.'' "не повторяй себя"). Этот процесc реорганизации кода называется рефакторинг (refactoring).

Для того, чтобы быть уверенным, что всё приложение по-прежнему работает правильно, несмотря на постоянные изменения, необходимо проводить юнит-тестирование. Юнит-тестирование — это отличный способ быть уверенным в том, что всё работает четко после изменений в коде. Некоторые стратегии разработки гласят, что нужно писать тесты прежде чем писать код приложения, и это называется test-driven development (TDD).

Есть ещё много принципов и хороших привычек, связанных с RAD. Одна из наиболее эффективных RAD-стратегий называется Extreme Programming (сокращенно XP). Литература по XP может научить многому для быстрой и эффективной разработки приложений. Отправной точкой может послужить серия книг по XP, написанная Kent Beck'ом (Addison-Wesley). Symfony — отличный инструмент для RAD. Важен тот факт, что symfony создан компанией, применяющей RAD для своих проектов. Это означает, что научиться использовать symfony — это научиться применять все лучшие на сегодня правила и принципы веб-разработки.

YAML

Согласно официальному сайту YAML (http://www.yaml.org/), YAML — это "формат для представления данных в читаемом для человека виде и взаимодействия со скриптовыми языками, который может быть легко обработан (parse)"

NOTE Перевод цитаты вышел не очень удачно, на всякий случай приведу ее на английском: "a straightforward machine parsable data serialization format designed for human readability and interaction with scripting languages." (прим. переводчика)

Иначе говоря, YAML — это очень простой язык, используемый для описания данных, подобный XML, но с очень простым синтаксисом. Особенно удобен для описания данных, которые могут быть представлены в виде массивов или хэшей. Например:

[php]
<?php
$house = array(
    'family' => array(
        'name'     => 'Doe',
        'parents'  => array('John', 'Jane'),
        'children' => array('Paul', 'Mark', 'Simone')
    ),
    'address' => array(
        'number'   => 34,
        'street'   => 'Main Street',
        'city'     => 'Nowheretown',
        'zipcode'  => '12345'
    )
);

Этот PHP-массив может быть автоматически создан при обработке (parse) такого YAML файла:

house:
  family:
    name:     Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

В YAML структура данных описывается с помощью ключей. Последовательность элементов выделяется дефисом (dash). В YAML можно также пользоваться укороченным синтаксисом, для определения той же структуры данных: массивы выделены квадратными скобками [], а хэши фигурными {}. То есть данные из примера могут быть представлены так:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

YAML расшифровывается как Yet Another Markup Language и произносится как "yamel". Формат существует с 2001 года, и parser'ы для YAML написаны для многих языков. Спецификации доступны по адресу http://www.yaml.org/. Файл YAML пишется гораздо быстрее, чем аналогичный XML, и обеспечивает больше возможностей, чем файлы .ini (которые не поддерживают иерархию). Вот почему symfony использует YAML файлы как файлы конфигурации. В следующих главах вы увидите много YAML файлов, все они очень просты.

Итого

Symfony — это фреймворк, написанный на PHP5. Он обеспечивает множество удобных инструментов для разработки сложных веб-приложений. Эта книга рассказывает о возможностях фреймворка. Чтобы понять изложенный материал, нужно понимать базовые идеи современного программирования: объектно-ориентированное программирование (ООП), object-relational mapping (ORM) и rapid application development (RAD). Единственное техническое условие — знание PHP5.

Перевел Алексей Гоголев postman [at] dev [dot] co [dot] ua

Обновил до версии 1.1 Виталий Маренков admin [at] mavik [dot] com [dot] ua

Статья также доступна по адресу http://developer.co.ua/posts/view/glava_1_predstavljaem_symfony