PRADO — компоненты для PHP
обзор PRADO framework
Итак, разговор о PRADO мы, пожалуй, начнем с расшифровки названия. За этой аббревиатурой из пяти букв скрывается достаточно хитро составленная фраза PHP Rapid Application Development Object-oriented. Что же представляет собой PRADO? Позволю себе повторить слова разработчиков описываемого продукта, которые уже цитировал в анонсе к материалу: "PRADO is component-based and event-driven framework for developing Web applications in PHP5". Основной же целью упомянутые разработчики называют "создание такого решения, которое бы позволяло работать с reusable-кодом для Веба по максимуму". Да, именно reusable-код считается одним из важнейших для эффективной работы моментов. Причем речь здесь идет не только о независимых кусках этого кода, которые мы вставляем в разные веб-приложения. PRADO идет дальше и предлагает своим пользователям философию разработки, построенную на базе компонентов, но об этом мы поговорим чуть позже.
А для начала хотелось бы добавить пару слов об истории продукта под названием PRADO. Все началось в 2004 году, когда Qiang Xue написал первую версию проекта, еще на PHP4. Со слов автора, вдохновение он черпал в Apache Tapesty, а многие идеи были взяты из Borland Delphi и Microsoft ASP.NET. Затем в рамках конкурса Zend PHP5 coding contest продукт PRADO был переписан в PHP5. К слову, на том конкурсе творение Qiang Xue заняло первое место, получив самые теплые отзывы как со стороны общественности, так и со стороны официального жюри. Впоследствии PRADO пережил несколько тотальных переделок, и в апреле 2006 года мир увидел третью версию этого продукта.
Описание
Итак, компонентный подход к разработке веб-приложений — это явление пусть и знакомое, но все же достаточно редкое. Более того, многие эксперты отзываются о PRADO не иначе как об уникальном продукте, а множество пользователей и слышать не хотят ни о чем другом, кроме PRADO. Однако мы попробуем разобраться, почему дела обстоят именно так позитивно.
Из отличительных особенностей разработки веб-приложений с PRADO стоит выделить следующие:
- Reusability. Об этом пункте мы уже вскользь говорили во вступлении к материалу. Сама философия PRADO включает в себя, условно говоря, протоколы для создания компонентов и дальнейшей работы с ними. Из этих компонентов впоследствии и строятся веб-приложения. Кроме того, каждый компонент имеет свои методы, переменные и параметры.
- Event-driven-программирование. Если коротко, то любое действие пользователя нашего веб-приложения (к примеру, нажатие определенной кнопки) расценивается движком как серверное событие, поэтому у разработчика отпадает ряд проблем, связанных с отслеживанием действий на клиентской стороне.
- Разделение презентационного и логического слоев. Об этом говорят сегодня практически все авторы веб-проектов, но на деле оказывается, что упомянутые слои не всегда или не до конца разделены. А это очень важно, ибо позволяет сузить круг обязательных знаний того или иного члена команды, работающей над проектом.
- Библиотека готовых компонентов. PRADO поставляется в комплекте со множеством готовых заранее и протестированных компонентов, которые способны решать многие из задач, с которыми веб-разработчики сталкиваются ежедневно. Таким образом, только на базе этих компонентов можно создавать полноценные и максимально интерактивные веб-приложения.
- Поддержка AJAX. Взаимоотношения PRADO и AJAX — очень важный момент, который, думаю, способен склонить в сторону описываемого продукта еще большее количество разработчиков. Во-первых, в PRADO предусмотрена возможность полноценного использования AJAX-функционала в рамках компонентов и веб-приложений. А во-вторых, в PRADO уже встроены многие популярные и часто используемые AJAX-библиотеки, включая Prototype, script.aculo.us и Rico.
К перечисленным выше преимуществам еще можно добавить полное соответствие генерируемых PRADO веб-страниц стандарту XHTML и возможность безболезненно использовать PRADO вместе с другими популярными продуктами. К примеру, для работы с базой данных мы можем применить AdoDB или Creole.
Применимость
Следующий вопрос, о котором хотелось бы поговорить в настоящем материале, это применимость PRADO в тех или иных ситуациях, ведь, как известно, далеко не каждое решение может быть успешно использовано в двух разных проектах. Сами создатели PRADO рекомендуют свой продукт тем специалистам, которые занимаются разработкой веб-приложений небольших или средних размеров. То есть для совсем крупных проектов герой сегодняшнего обзора подходит с трудом.
Дело тут вот в чем: при грамотной реализации действительно масштабных веб-приложений или сервисов важную роль играет функционал, отвечающий за кеширование контента. Хоть в PRADO они и есть, но многие специалисты, имевшие дело с этим продуктом, отмечают, что их уровень оставляет желать лучшего. В то же время на помощь всегда может прийти, к примеру, Zend optimizer. В любом случае при использовании PRADO в рамках крупного проекта тонкостей, требующих к себе внимания, становится значительно больше.
К слову, сравнивать PRADO с другими frameworks или библиотеками для PHP-программистов сложно. В первую очередь потому, что этот продукт пропагандирует совсем другой подход к разработке веб-приложений. В процессе сбора информации для статьи мне не раз и не два приходилось сталкиваться с таким определением для PRADO: высокоуровневый язык, стоящий над простым PHP. В некотором роде это правда: PRADO является технологией, значительно превосходящей по своим возможностям обычную framework.
Практика
Разбираться с тем, как работает PRADO, мы будем на простейшем примере, в рамках которого создадим веб-приложение с одной кнопкой, при нажатии на которую страница будет перезагружаться с той же самой кнопкой, но уже с новым текстом. Решить такую задачу можно несколькими способами. В PRADO есть объект TButton, который и реализует объект кнопки. У него есть параметр Text (текст кнопки), и с ним можно связать событие OnClick (нажатие пользователем на кнопку). Именно в рамках этих знаний мы и будем действовать.
Но для начала разберемся с тем, как в PRADO следует организовывать файлы. Каждое веб-приложение здесь состоит из нескольких файлов, которые хранятся в различных папках согласно их назначению. В нашем случае мы создаем папку test, в которой затем создаем еще несколько папок: assets, protected, protected/pages, protected/runtime.
Рассмотрим назначение каждой из папок:
- assets — в этой папке хранятся файлы, необходимые для работы веб-приложения и не являющиеся кодом; к примеру, изображения, звуки, видеофайлы или CSS-файлы;
- protected — здесь хранятся файлы с данными, необходимыми для работы веб-приложения, и файлы со скриптами;
- protected/runtime — в этой папке создаются и хранятся файлы с runtime-данными, необходимыми для работы веб-приложения (например, кешированные данные и т. д.);
- protected/pages — здесь хранятся все страницы, относящиеся к веб-приложению.
Затем нам потребуется создать еще три файла: index.php (в корневой папке), Home.page и Home.php (в папке protected/pages). Все, больше для нашего маленького примера файлов или папок не понадобится. Теперь осталось лишь рассказать о том, за что каждый из файлов отвечает, и добавить весь необходимый код.
index.php
Это главный и управляющий скрипт всего веб-приложения, разработанного с помощью PRADO. Иными словами, он требуется всегда для корректного исполнения проекта и к тому же является единственным файлом, доступным конечному пользователю напрямую. Как правило, содержимое index.php в веб-приложениях на PRADO состоит из следующих трех строк.
require_once('path/to/prado.php'); // добавляем базовый скрипт PRADO
$application = new TApplication; // создаем PRADO application instance
$application->run(); // запускаем PRADO application
Но это в принципе все, ибо остальные моменты мы опишем в других файлах. Пока же отмечу, что указанная структура папок не является единственной возможной и разработчик может менять ее под свои нужды практически без ограничений.
Home.page
Любое веб-приложение в PRADO должно иметь свою базовую страницу с именем Home, а файл с расширением .page является шаблоном для этой страницы. Вообще же шаблоны в PRADO определяют презентационный слой наших приложений и компонентов. То есть внутри этих файлов мы описываем с помощью языка HTML и специальных тегов разметку той или иной страницы.
<html>
<body>
<com:TForm>
<com:TButton Text="Нажимать здесь" OnClick="buttonClicked" />
</com:TForm>
</body>
</html>
Как видно из примера, мы использовали два специальных тега: com:TForm и com:TButton. Они сообщают движку PRADO, что на страницу надо добавить элементы формы и кнопки. Думаю, тут все просто и понятно даже новичку.
Home.php
Последний файл в нашем примере. В нем мы описываем класс для страницы Home. Если же говорить в общем, то подобные файлы содержат методы, отвечающие за логику наших приложений или компонентов. Для настоящего материала у нас в файле Home.php есть лишь один метод, отвечающий за событие OnClick у кнопки на странице.
class Home extends TPage
{
public function buttonClicked($sender, $param)
{
$sender->Text = "Кнопка была нажата!";
}
}
И здесь ничего сложного нет. Наш класс Home строится на базе класса TPage, который отвечает в PRADO за страницы. Единственная функция buttonClicked меняет текст кнопки при перезагрузке страницы на "Кнопка была нажата!". Стоит обратить внимание на объект $sender, который является ссылкой на элемент страницы, который вызвал функцию.
На этом пример заканчивается, ибо у нас получилось полностью готовое веб-приложение, которое при желании можно разместить на сервере и запустить. Разумеется, его масштаб не сравнится с более-менее комплексными проектами, но, для того чтобы понять схему разработки, такого объема вполне достаточно. Единственное, о чем хотелось бы напомнить, это встроенные в PRADO компоненты. Их много, и они решают очень широкий спектр задач: к примеру, paging, сортировка данных или работа с комментариями. Причем работать с ними немногим сложнее, чем в нашем примере.
Итог
К сожалению, рассказать о каждой возможности PRADO детально в рамках настоящей статьи просто невозможно. Этот продукт обладает поистине громадным потенциалом, особенно если будет использоваться умело и уместно. Однако стоит отметить, что PRADO не является готовым решением, которое можно установить и сразу приступить к наполнению веб-сайта контентом. Иными словами, PRADO — это framework, а не система управления контентом.