Development

Documentation/ru_RU/book/1.1/01-Introducing-Symfony (diff)

You must first sign up to be able to contribute.

Changes from Version 1 of Documentation/ru_RU/book/1.1/01-Introducing-Symfony

Show
Ignore:
Author:
mavik (IP: 91.124.23.133)
Timestamp:
07/08/08 23:26:05 (9 years ago)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/ru_RU/book/1.1/01-Introducing-Symfony

    v0 v1  
     1{{{ 
     2#!WikiMarkdown  
     3Глава 1 - Представляем Symfony 
     4============================== 
     5 
     6Перевод первой главы  "Introducing Symfony"  онлайн-книги "Definitive guide to Symfony". 
     7 
     8Что необходимо для работы с symfony? Какие возможности обеспечивает symfony? Здесь вы найдете ответы на эти вопросы. 
     9 
     10Вкратце о Symfony 
     11------------------ 
     12 
     13Symfony — фреймворк с открытым кодом, полностью написанный на PHP5. Использование фреймворка позволяет создавать более структурированный, читаемый код и упрощает программирование хотя бы потому, что набор сложных операций часто можно заменить одной строчкой кода. Symfony основан на идее MVC (MVC pattern) и создан для упрощения разработки веб-приложений. Фреймворк включает в себя множество инструментов и классов, призванных максимально сократить время разработки сложного веб-приложения. Также symfony автоматизирует наиболее популярные и частые задачи, что позволяет разработчику уделить больше внимания особенностям данного конкретного проекта. Благодаря вышеперечисленным преимуществам, вам не потребуется изобретать колесо, каждый раз когда вы приступите к разработке нового приложения. 
     14 
     15Фреймворк использовался и хорошо себя зарекомендовал во многих проектах (На текущий момент (''2006-10-28'') на symfony построена бета-версия '''Yahoo! Bookmarks'''), в том числе в сложных приложениях е-коммерции. Symfony совместим со многими базами данных (включая MySQL, PostgreSQL, Oracle, и Microsoft SQL Server) и может быть установлен и на *nix и на Windows. Перечислим возможности фреймворка подробнее. 
     16 
     17Возможности symfony 
     18------------------- 
     19 
     20Symfony соответствует следующим требованиям: 
     21 
     22  * Легко устанавливать и настраивать (конфигурировать) на большинстве платформ (гарантированно работает на *Unix и Windows). 
     23  * Независимость от выбора базы данных. 
     24  * Простота использования в большинстве случаев, и гибкость для решения нетипичных задач. 
     25  * Фреймворк основан на правиле — разработчику необходимо настроить только нетипичные опции (индивидуальные для данного проекта). 
     26  * В рамках symfony применимы большинство лучших методик разработки и шаблонов проектирования. 
     27  * Адaптируем к существующим правилам и стратегиям работы IT-компаний  (Enterprise-ready), достаточно устойчив для проектов с длинными сроками.  
     28  * Читаемый и прозрачный код; возможность использования phpDocumentor. 
     29  * При желании функциональность можно легко расширить сторонними библиотеками. 
     30 
     31### Возможности автоматизирования 
     32 
     33В symfony выполнение многих типичных задач автоматизировано: 
     34 
     35  * Встроенный слой (layer) для поддержки многоязычности приложения позволяет переводить интерфейс и данные. 
     36  * HTML-страницы строятся из шаблонов (template) и главных шаблонов (layout — общие шаблоны для всех модулей данного приложения). Шаблоны можно делать не обладая никакими знаниями о фреймворке. Helpers (''англ.'' помощники) — позволяют делать код в шаблонах более читаемым, помещая большие порции кода в одну строчку с вызовом функции. 
     37  * Формы в symfony поддерживают автоматическую валидацию. 
     38  * Приложение защищено от атак путем ввода искаженной информации. 
     39  * Возможности кэширования уменьшают нагрузку на сервер и увеличивают быстродействие. 
     40  * Спецальные средства упрощают управление безопасностью и разграничением прав доступа пользователей. 
     41  * Красивые URL делают строку адреса полезной для поисковых машин, и позволяют использовать ее как часть интерфейса. 
     42  * Встроенная поддержка e-mail и средства управления API позволяют веб-приложениям переступать через классические  взаимодействия с браузером 
     43  * Есть удобные списки, с автоматизированным пейджингом, сортировкой и фильтрацией. 
     44  * Благодаря специальным helper'ам легко создавать интерфейсы на базе AJAX, поддерживающие различные браузеры 
     45 
     46### Режим разработки (development environment) 
     47 
     48Symfony может быть полностью сконфигурирован согласно требованиям различных фирм и компаний, у каждой из которых есть свои правила разработки. По умолчанию фреймворк предоставляет режим разработки (development environment), содержащий множество инструментов для автоматизации наиболее типичных задач: 
     49 
     50  * Благодаря возможности генерировать код можно одной командой построить интерфейс администратора. 
     51  * Фреймворк предоставляет инструменты, упрощающие TDD (test-driven development). 
     52  * На панель отладки (debug toolbar) выводится вся информация, необходимая для исправления ошибок. 
     53  * Интерфейс командной строки позволяет адаптировать проект для установки на сервер (production server). 
     54  * Разработчику предоставлена возможность удобно менять настройки фреймворка. 
     55  * Логи (или журналы событий) дают полную картину работы приложения. 
     56  
     57Кто создал symfony и зачем? 
     58--------------------------- 
     59 
     60Первая версия symfony была выпущена в октябре 2005 г. основателем проекта Фабьеном Потенсьером (Fabien Potencier). Fabien — генеральный директор Sensio (http://www.sensio.com/), французской веб-фирмы, известной своими инновационными взглядами на веб-разработку. 
     61 
     62В 2003 году Фабьен изучил возможности существующих средств разработки приложений на PHP5 с открытым кодом. Ни одно из них не удовлетворяло перечисленным выше требованиям. Когда же появился PHP5, Фабьен решил, что PHP созрел для написания полнофункционального фреймворка. Позже он потратил год на разработку ядра symfony, взяв в качестве основы MVC pattern, ORM Propel, и helper'ы из Ruby on Rails. 
     63 
     64Изначально Фабьен разрабатывал symfony для Sensio. Это дало бы фирме преимущества, поскольку использование фреймворка в работе делает готовые проекты более надежными, а разработку приложений быстрой и интуитивно понятной. После успешного использования фреймворка в приложениях е-комерции и других проектах Фабьен решил сделать symfony проектом с открытым кодом. Он сделал это, чтобы дать возможность другим людям пользоваться symfony, чтобы получить связь с пользователями фреймворка, чтобы поделится опытом Sensio, и потому что open sourсe это весело. :) 
     65 
     66>**NOTE** 
     67>Почему фреймворк назвали symfony? Потому что Фабьен хотел дать фреймворку короткое имя, легко запоминающееся, не ассоциирующееся с другими проектами, содержащее буквы “s” (Sensio) и “f” (framework). Также он не любит большие буквы. “symfony” подходит под все эти требования, не смотря на то, что слово не полностью английское. Другой альтернативой было название “baguette.” (''багет, длинный французский хлеб'') </p></blockquote> 
     68 
     69Для того, чтобы symfony стал успешным проектом, требовалась хорошая документация на английском языке. Фабьен попросил своего товарища François Zaninotto, сотрудничавшего с Sensio, разобраться во фреймворке и написать online книгу о symfony. Это заняло время, но в итоге у symfony появилась замечательная документация, благодаря которой фреймворк стали использовать множество разработчиков. Остальное история. 
     70 
     71Сообщество symfony 
     72------------------ 
     73 
     74После того как был запущен сайт symfony (http://www.symfony-project.com/), многие разработчики скачивали и устанавливали фреймворк, создавали свои первые проекты на symfony. Дело начало набирать обороты. В это время фреймворки для разработки веб-приложений набирали популярность, и потребность в полнофункциональном PHP фреймворке была высока. Symfony предлагал подробную документацию и замечательные решения с высоким качеством кода — два основных преимущества фреймворка. Вскоре появились помощники, которые предлагали различные патчи и улучшения, вычитывали документацию и всячески помогали развитию проекта. Открытый репозиторий с кодом и система ticket'ов (баг-трекер) дали возможность помогать проекту всем желающим. Symfony всегда рад волонтерам. Фабьен продолжает активно разрабатывать фреймворк, и гарантирует качество кода в репозитории. 
     75 
     76Форум, открытая переписка (mailing lists), и канал IRC чата обеспечивают поддержку пользователей. В среднем на любой вопрос приходится четыре ответа. Каждый день увеличивается число пользователей symfony. Wiki и code snippets (куски кода которые могут быть полезными) пополняются пользователями фреймворка. Количество приложений, разработанных на symfony, растет в среднем на 5 штук в день. Развитое сообщество — третье преимущество symfony. 
     77 
     78Symfony подойдет мне? 
     79--------------------- 
     80 
     81Независимо от того, эксперт вы в PHP5 или новичок, вы сможете использовать symfony. Основой определяющий фактор, делать это или нет — масштабы вашего проекта. 
     82 
     83Если вы хотите создать простой сайт с пятью-десятью страницами, доступом к базе данных, и вам не нужно обеспечить сайт документацией и быть уверенным в его надежности, тогда лучше не использовать symfony. Вы мало выиграйте от использования фреймворка, и возможно объектная ориентированность кода и идея MVC только понизят скорость разработки. Отметим, что symfony не оптимизирован для работы на серверах, где PHP-скрипты могут быть запущены только в режиме CGI. 
     84 
     85С другой стороны, для разработки серьезного веб-приложения со сложной логикой голого PHP будет недостаточно. Если вы планируете поддерживать и расширять приложение в будущем и получить неперегруженный и читаемый код, если вы хотите разрабатывать современные интерфейсы с использованием AJAX, и при этом не писать сотни строчек JavaScript, если вы хотите сделать свою работу более легкой и быстрой, тогда symfony вам подойдет. 
     86 
     87Если вы профессиональный веб-разработчик и ищите развитый PHP-фреймворк с хорошей документацией и большим сообществом (community), то symfony — для вас. 
     88 
     89Можете посмотреть демо-ролики (screencast) на сайте проекта, чтобы убедится, как легко и быстро можно создавать приложения, используя symfony. 
     90 
     91 
     92Основные концепции 
     93------------------ 
     94 
     95Прежде чем взяться за дело, необходимо понять основные концепции, на которых стоит symfony. Если вы знаете что такое OOP, ORM, RAD, DRY, KISS, TDD, YAML и PEAR, то пропускайте эту часть. 
     96 
     97### PHP 5 
     98 
     99Так как symfony написан на PHP5, программировать вам тоже придется на PHP5. Следовательно, твердое понимание PHP5 крайне желательно, чтобы сделать свою работу максимально эффективной. Минимальной версией требуемой для работы Symfony является PHP 5.1. 
     100 
     101>**NOTE** 
     102>Мне кажется, авторы перегибают в этом месте. Не могу сказать, что когда я начал осваивать symfony, у меня было «твердое понимание PHP5» (прошло меньше полугода после того, как я написал первую строчку на PHP). Несмотря на это, ничего страшного со мной не случилось. Так что не стоит пугаться, если вы не сильно подкованы в PHP. (прим. переводчика) 
     103 
     104Разработчикам, которые работали с PHP4, но не работали с PHP5, следует обратить внимание на новую объектно-ориентированную модель языка (object-oriented model). 
     105 
     106### Объектно-ориентированное программирование (ООП) 
     107 
     108Нет, тут не будут поясняться концепции ООП, ведь для этого потребовалась бы целая книга. Так как в symfony активно используются классы, понимание идей ООП необходимо для освоения фреймворка ( 
     109<a href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"> 
     110Читать об ООП на wikipedia)</a> 
     111 
     112PHP5 оперирует такими понятиями как класс, объект, метод, наследование и др. Если вы не знакомы со всей этой кухней, настоятельно рекомендуется почитать документацию (http://www.php.net/manual/en/language.oop5.basic.php) — без этого в symfony и шагу не ступишь. 
     113 
     114### Magic Methods 
     115 
     116Одна из сильных сторон PHP5 — использование magic method'ов (''англ.'' волшебный метод). Это методы, призванные изменить работу классов без правки кода. Наличие magic method'ов делает синтаксис PHP более гибким. Такие методы легко узнать — их названия начинаются с двойного подчеркивания (!__). 
     117 
     118Например выводя объект, PHP ищет метод !__toString() 
     119данного класса, чтобы узнать, задал ли разработчик свой формат вывода: 
     120 
     121    [php] 
     122    <?php 
     123    $myObject = new myClass(); 
     124    echo $myObject; 
     125    // Will look for a magic method 
     126    echo $myObject->__toString(); 
     127 
     128Symfony использует magic method'ы, поэтому рекомендуется ознакомится с их описанием (http://www.php.net/manual/en/language.oop5.magic.php). 
     129 
     130### PHP Extension and Application Repository (PEAR) 
     131 
     132PEAR — это система распространения полезных PHP-компонентов (пакетов, библиотек). PEAR позволяет скачивать, устанавливать, делать upgrade и удалять PHP-пакеты. Используя пакеты из PEAR, вам не нужно волноваться о том, куда что пишется, как устанавливаемые скрипты становятся доступными и т.п. — все это делается автоматически.  
     133 
     134PEAR поддерживается сообществом. На сайте проекта (http://pear.php.net/) можно найти документацию и пакеты, сгруппированные по категориям. 
     135 
     136Установка через PEAR — наиболее профессиональный путь установки библиотек. Symfony рекомендует использовать PEAR для того, чтобы устанавливаемые пакеты были общими для всех ваших проектов. Plugin'ы для фреймворка — это специально сконфигурированные PEAR-пакеты. Сам фреймворк также доступен как PEAR-пакет. 
     137 
     138Вам не нужно в совершенстве знать устройство PEAR для использования symfony. Главное — понимать что это и установить его на свой компьютер. Вы можете проверить, установлен ли PEAR, c помощью команды: 
     139 
     140    > pear info pear 
     141 
     142Эта команда должна вывести номер верcии вашего PEAR. Symfony имеет свой канал в PEAR. Отметим, что использование каналов возможно, только если у вас установлен PEAR версии не менее 1.4.0. Если меньше, то вам нужно сделать upgrade, используя команду: 
     143 
     144    > pear upgrade PEAR 
     145 
     146### Object-Relational Mapping (ORM) 
     147 
     148Базы данных — реляционные. PHP5 и symfony — объектно-ориентированны. Для того, чтобы доступ к базам был объектно-ориентированным, требуется интерфейс, позволяющий перевести объектную логику в реляционную. Этот интерфейс называется object-relational mapping, или ORM. 
     149 
     150ORM построен из классов, с помощью которых можно получить доступ к базе данных. 
     151 
     152Одно из преимуществ ORM — вам не нужно изучать язык запросов, индивидуальный для каждой базы данных. Операции с объектами автоматически переводятся в запросы, оптимизированные для текущего типа базы данных. Это означает, что перейти на другую базу данных, даже посередине разработки проекта, будет просто. 
     153 
     154Еще одно преимущество использования объектов вместо записей и классов вместо таблиц — вы можете определить нужные вам операции. Например, есть таблица Client с полями !FirstName и !LastName. Допустим, вам нужно получать Имя+Фамилия. Благодаря ORM это просто сделать, добавив метод: 
     155 
     156    [php] 
     157    <?php 
     158    public function getName() 
     159    { 
     160        return $this->getFirstName().' '.$this->getLastName(); 
     161    } 
     162 
     163Все повторяющиеся операции с данными в коде могут быть заменены подобными методами. Еще один пример: 
     164 
     165Есть класс !ShoppingCart, с помощью которого вы храните товары (items). Для того, чтобы получить суммарную цену товаров клиента, можно добавить метод getTotal(): 
     166 
     167    [php] 
     168    <?php 
     169    public function getTotal() 
     170    { 
     171        $total = 0; 
     172        foreach ($this->getItems() as $item) 
     173        { 
     174            $total += $item->getPrice() * $item->getQuantity(); 
     175        } 
     176        return $total; 
     177    } 
     178 
     179А теперь представьте, сколько бы времени потребовалось на написание аналогичного SQL-запроса. 
     180 
     181Propel — один из лучших ORM для PHP5. Propel встроен в symfony как ORM по умолчанию, так что  оперировать данными можно на "объектном языке". В следующих главах будут рассказаны основы синтаксиса Propel, но более детальную документацию можно найти по адресу http://propel.phpdb.org/trac/. 
     182 
     183В Symfony 1.1 Propel входит как плагин, что позволяет легко заменить его другой ORM. Если вы хотите использовать в качестве ORM Doctrine, вы должны установить sfDoctrinePlugin. 
     184 
     185### Rapid Application Development (RAD) 
     186 
     187>**NOTE** 
     188>rapid application development переводится как «быстрая разработка приложений» 
     189 
     190Веб-программирование долгое время было скучной и медленной работой. Следуя стратегии полных циклов разработки, к работе не приступали прежде чем не был сформирован список требований, не нарисовано множество диаграмм (Unified Modeling Language (UML) diagrams) и не написаны тонны документации. Это было обусловлено скоростью разработки (нужно написать, скомпилировать и бог знает что еще сделать прежде чем увидеть программу в действии), и конечно же клиентами, которые были более рассудительны и не меняли постоянно свои требования. 
     191 
     192Сегодня, когда все процессы в бизнесе очень быстрые, клиенты склонны постоянно менять свои требования по ходу разработки. Конечно же, они ожидают, что разработчики быстро адаптируются к новым требованиям и изменят проект. К счастью, использование таких скриптовых языков, как Perl и PHP позволяют применить другие стратегии разработки. Например rapid application development (RAD) (синоним — agile development). 
     193 
     194Одна из идей этой стратегии — начинать разработку как можно быстрее, чтобы клиент видел уже рабочую заготовку и корректировал работу в нужном направлении. То есть процесс разработки носит итеративный характер: как можно быстрее сделали, выслушали пожелания заказчика и опять за работу. Так, шаг за шагом, следуя стратегии коротких циклов разработки, проект приближается к идеалу клиента. 
     195 
     196Основные принципы работы согласно RAD следующие: разработчик не должен думать "в перспективу", когда решает какую-то подзадачу (например, добавляет какой-то функционал). Решение должно быть самое простое из возможных (принцип KISS: Keep It Simple, Stupid.  ''англ.'' "делай просто и глупо"). Когда, при следующей итерации, требования поменяются, код нужно будет частично переписать. Это часто случается по ходу разработки. Код перемещают в другие файлы, туда где им место согласно их сущности (например, все операции с базой данных лежат в одном месте). Повторяющийся код переносится в одно место, и заменяется на вызовы функций или методов. (принцип DRY: Don't Repeat Yourself.  ''англ.'' "не повторяй себя"). Этот процесc реорганизации кода называется рефакторинг (refactoring). 
     197 
     198Для того, чтобы быть уверенным, что всё приложение по-прежнему работает правильно, несмотря на постоянные изменения, необходимо проводить юнит-тестирование. Юнит-тестирование — это отличный способ быть уверенным в том, что всё работает четко после изменений в коде. Некоторые стратегии разработки гласят, что нужно писать тесты прежде чем писать код приложения, и это называется test-driven development (TDD). 
     199 
     200Есть ещё много принципов и хороших привычек, связанных с RAD. Одна из наиболее эффективных RAD-стратегий называется Extreme Programming (сокращенно XP). Литература по XP может научить многому для быстрой и эффективной разработки приложений. Отправной точкой может послужить серия книг по XP, написанная Kent Beck'ом (Addison-Wesley). Symfony — отличный инструмент для RAD. Важен тот факт, что symfony создан компанией, применяющей RAD для своих проектов. Это означает, что научиться использовать symfony — это научиться применять все лучшие на сегодня правила и принципы веб-разработки. 
     201 
     202### YAML 
     203 
     204Согласно официальному сайту YAML (http://www.yaml.org/), YAML — это "формат для представления данных в читаемом для человека виде и взаимодействия со скриптовыми языками, который может быть легко обработан (parse)" 
     205 
     206>**NOTE** 
     207>Перевод цитаты вышел не очень удачно, на всякий случай приведу ее на английском: "a straightforward machine parsable data serialization format designed for human readability and interaction with scripting languages." (прим. переводчика) 
     208 
     209Иначе говоря, YAML — это очень простой язык, используемый для описания данных, подобный XML, но с очень простым синтаксисом. Особенно удобен для описания данных, которые могут быть представлены в виде массивов или хэшей. Например: 
     210 
     211    [php] 
     212    <?php 
     213    $house = array( 
     214        'family' => array( 
     215            'name'     => 'Doe', 
     216            'parents'  => array('John', 'Jane'), 
     217            'children' => array('Paul', 'Mark', 'Simone') 
     218        ), 
     219        'address' => array( 
     220            'number'   => 34, 
     221            'street'   => 'Main Street', 
     222            'city'     => 'Nowheretown', 
     223            'zipcode'  => '12345' 
     224        ) 
     225    ); 
     226 
     227Этот PHP-массив может быть автоматически создан при обработке (parse) такого YAML файла: 
     228 
     229    house: 
     230      family: 
     231        name:     Doe 
     232        parents: 
     233          - John 
     234          - Jane 
     235        children: 
     236          - Paul 
     237          - Mark 
     238          - Simone 
     239      address: 
     240        number: 34 
     241        street: Main Street 
     242        city: Nowheretown 
     243        zipcode: 12345 
     244 
     245В YAML структура данных описывается с помощью ключей. Последовательность элементов выделяется дефисом (dash). В YAML  можно также пользоваться укороченным синтаксисом, для определения той же структуры данных: массивы выделены квадратными скобками [], а хэши фигурными {}. То есть данные из примера могут быть представлены так: 
     246 
     247    house: 
     248      family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] } 
     249      address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 } 
     250 
     251YAML расшифровывается как Yet Another Markup Language и произносится как "yamel". Формат существует с 2001 года, и parser'ы для YAML написаны для многих языков. Спецификации доступны по адресу http://www.yaml.org/. Файл YAML пишется гораздо быстрее, чем аналогичный XML, и обеспечивает больше возможностей, чем файлы .ini (которые не поддерживают иерархию). Вот почему symfony использует YAML файлы как файлы конфигурации. В следующих главах вы увидите много YAML файлов, все они очень просты. 
     252 
     253Итого 
     254----- 
     255 
     256Symfony — это фреймворк, написанный на  PHP5. Он обеспечивает множество удобных инструментов для разработки сложных веб-приложений. Эта книга рассказывает о возможностях фреймворка. Чтобы понять изложенный материал, нужно понимать базовые идеи современного программирования: объектно-ориентированное программирование (ООП), object-relational mapping (ORM) и rapid application development (RAD). Единственное техническое условие — знание PHP5. 
     257 
     258Перевел Алексей Гоголев  
     259postman [at] dev [dot] co [dot] ua 
     260 
     261Обновил до версии 1.1 Виталий Маренков 
     262admin [at] mavik [dot] com [dot] ua 
     263 
     264Статья также доступна по адресу <a href="http://developer.co.ua/posts/view/glava_1_predstavljaem_symfony">http://developer.co.ua/posts/view/glava_1_predstavljaem_symfony</a> 
     265}}}