developer.co.ua

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

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

Что необходимо для работы с 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 соответствует следующим требованиям:

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


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

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


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

Кто создал 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 это весело :)

Почему фреймворк назвали 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 у меня было «твердое понимание 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() данного класса, чтоб узнать задал ли разработчик свой формат вывода:

<?
$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 для того чтоб устанавливаемые пакеты были общими для всех ваших проектов. Plug-in-ы для фреймворка это специально сконфигурированные 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)


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

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

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

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

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


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

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

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


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

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

Rapid Application Development (RAD)


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 это научится применять все лучшие на сегодня правила и принципы веб разработки.

На сайте symfony размещен туториал, иллюстрирующий принципы RAD. У туториала есть имя — “askeet”, и находится он по адресу http://www.symfony-project.com/askeet. Askeet рекомендуется всем, кто хочет глубже понять принципы RAD на практике.

YAML


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

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


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

<?=
$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.


1 2 3 4 5

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

KISS Андрей
KISS

Keep It Simple, Stupid

переводится как

«Делай проще, глупый»

а не

«делай просто и глупо»

Вопрос Karsonito
У меня такой вопрос: мне предстоит написать высоко нагруженный сайт (до миллиона хитов в сутки). Не могу определиться с выбором между фреймворками (symphony, phpcake, zend) или использовать собственные наработки. Меня пугает излишня прожорливость ORM. Конечно все зависит от характера запросов к БД, от оптимизаций запросов (если они конечно поддерживаются). Надо бы провести серию тестов и выяснить так ли все плохо.
А пока можете что-то посоветовать?

2warwar Natts
Варвар, Вы оправдываете ваш ник ;)
На самом деле этот пример очень хорош для понимания того, ЗАЧЕМ абстрагироваться от SQL запросов.

Да, бесспорно, вы напишете такой запрос очень быстро. И если придется писать его в десяти местах – вы его скопируете, молодец.
А теперь представьте, что вам в каждом из этих десяти мест кода (в силу бизлогики, любых других причин) надо сделать еще какие-либо действия.
Вы будете писать лишний код под каждым запросом?

О причинах использования ORM написано очень не мало уже.. Да и факт того, что они (ORM) значительно медленнее PDO – тоже не новость.

to warwar Bananos
Примеры на то и примеры чтобы быть простыми и понятными.
Да и фреймворки создаются не для того чтобы подсчитывать суммы в столбцах.

ну вы блин даете... warwar

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


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

ну.... 0.3 с гдето!
select sum(field) from table where...

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