Глава 1 - Представляем Symfony
О работе "Глава 1 - Представляем Symfony"
Перевод первой главы "Introducing Symfony" онлайн-книги "Definitive guide to 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 была выпущена в октябре 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 крайне желательно, чтобы сделать свою работу максимально эффективной.
Разработчикам, которые работали с 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, так что оперировать данными можно на "объектном языке". В следующих главах будут рассказаны основы синтаксиса Propel, но более детальную документацию можно найти по адресу http://propel.phpdb.org/trac/. Rapid Application Development (RAD)
Веб-программирование долгое время было скучной и медленной работой. Следуя стратегии полных циклов разработки, к работе не приступали прежде чем не был сформирован список требований, не нарисовано множество диаграмм (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)"
Иначе говоря, 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 Статья также доступна по адресу http://developer.co.ua/posts/view/glava_1_predstavljaem_symfony Рейтинг работы 7 балловГолосовать могут только зарегистрированные пользователиРегистрацияВернуться |
