Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство Просвещения Республики Молдова
Бэлцкий Государственный Университет им. А. Руссо
Факультет Реальных Наук
Кафедра прикладной информатики и информационных технологий
Лицензионная работа на тему:
ИСПОЛЬЗОВАНИЕ PHP ФРЕЙМВОРКОВ В РАЗРАБОТКЕ САЙТА
Выполнил: Евгений Иванов
Студент дневного отделения, группа IS33Z
Специальность “Информатика и точные науки”
Код 141.02
Научный руководитель:
Лектор университета, магистр, Килат С.
Бэлць, 2012
Содержание
ВВЕДЕНИЕ
. PHP-ФРЕЙМВОРК
.1 Фреймворк программной системы
.2 Концепция PHP фреймворков.
.3 Случаи использования PHP фреймворка.
.4 Обзор современных фреймворков
1.4.1 Zend Framework
.4.2 CakePHP
.4.3 Kohana
.4.4 Codeigniter
1.4.5 Symfony
.4.6 Yii
.5 Сравнение популярных фреймворков
.6 Преимущества использования
.7 Недостатки применения
.8 Выбор оптимального фреймворка для разработки сайта
.8.1 Поддержка баз данных
.8.2 Поддержка сообщества
.8.3 Документация
.8.4 Производительность
.8.5 Безопасность
.8.6 Порог вхождения
.8.7 Скорость разработки
.8.8 Model View Controller архитектура
.8.9 Скорость развития фреймворка
.8.10 Обратная совместимость
.8.11 Наличие встроенных javascript-библиотек
.8.12 Поддержка со стороны хостинга
.9 Распространенные ошибки при выборе фреймворка.
. РАЗРАБОТКА ПРОЕКТА
.1 Приложения, использованные при разработке проекта
.1.1 Пакет для web-разработки «Denwer»
.1.2 Система управления СУБД MySQL “HeidiSQL”
.1.3 Редактор программного кода PhpStorm
.2 Разработка дизайна проекта и верстки
.3 Проектирование и создание базы данных
.4 Создание основы приложения и конфигурация
.5 Генерация каркаса кода с помощью кодогенератора Gii
.6 Установка верстки и доработка каркаса
.6.1 Настройка макета
.6.2 Настройка представлений видимых для посетителей
.6.3 Доработка правил валидации моделей и провайдеров данных
.6.4 Настройка представлений администратора
.7 Настройка кэширования, многоязычности и «красивых» ссылок
ЗАКЛЮЧЕНИЕ
БИБЛИОГРАФИЯ
- это высокоэффективный основанный на компонентной структуре PHP-фреймворк для разработки масштабных веб-приложений. Он позволяет максимально применить концепцию повторного использования кода и может существенно ускорить процесс веб-разработки. Название Yii (произносится как Yee или [ji:]) означает простой (easy), эффективный (efficient) и расширяемый (extensible).
Для запуска веб-приложений, построенных на Yii, вам понадобится веб-сервер с поддержкой PHP версии 5.1.0.
Для разработчиков, желающих использовать Yii, крайне полезным будет понимание концепции объектно-ориентированного программирования (OOП), так как Yii - это строго объектно-ориентированный фреймворк.
Целью работы является иследование работы фреймворка Yii и использование языка программирования PHP в созданий приложения на Yii
Практическая ценность. Был реализован практическиий пример на основе которого сделаны соответствующие выводы. Работа может быть полезна студентам, программистам и разработчикам сайтов.
Работа содержит введение, 2 главы, заключения и библиографию.
В первой главе описывается что собой представляет фреймворк, его концепция и случаи, в которых можно применить PHP фреймворк.
Во второй главе описанна практическая часть работы - установка самого фреймворка и его использование.
Работа содержит 30 страниц, 1 рисунок, 1 таблиц и 13 источников.
фреймворк база данное библиотека
Фреймворк это набор всевозможных библиотек (инструментов) для быстрой разработки повседневных задач.
Фреймворк (англ. <http://ru.wikipedia.org/wiki/Английский_язык> framework, син. Каркас) - в информационных системах структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. В отличие от библиотек, которые объединяют набор подпрограмм близкой функциональности, фреймворк содержит в себе большое количество разных по назначению библиотек. Употребляется также слово каркас, а некоторые авторы используют его в качестве основного, в том числе не базируясь вообще на англоязычном аналоге. Можно также говорить о каркасном подходе как о подходе к построению программ, где любая конфигурация программы строится из двух частей: первая, постоянная часть - каркас, не меняющийся от конфигурации к конфигурации и несущий в себе гнезда, в которых размещается вторая, переменная часть - сменные модули (или точки расширения).
фреймворки за последнее время набрали популярность, и стали базовой платформой для разработки веб-приложений. Другими словами можно сказать, что они обеспечивают основную структуру приложения. Использование PHP-фреймворков, позволяет экономить большое количество времени, уменьшить нагрузку на процесс разработки, избавлиться от проблемы повторяющегося кода, и быстро создавать приложения. Без использования PHP-фреймворков, становиться гораздо сложнее создавать веб-приложения, сопровождать и модернизировать их. Между тем, использование PHP фреймворков делает процесс создания приложения гораздо более легким и функциональным.
Сейчас большинство PHP проектов построены при помощи архитектуры Model View Controller(MVC). MVC - это архитектурный шаблон проектирования, который используется в большинстве языков программирования и позволяет отделить бизнес-логику от пользовательского интерфейса, а так же выделить область логики которая производит обмен информации между базой данных и пользовательским интерфейсом. Таким образом можно изменить логику приложения, не затрагивая интерфейсной части, либо наоборот, что очень хорошо для дизайнеров и верстальщиков. Это позволяет избежать путаницы и упрощает весь процесс разработки. Когда говорится о MVC, то имеется ввиду: Model - та часть архитектуры, которая взаимодействует с базой данных, View - представляет ту часть, которую непосредственно видит пользователь, то есть графический интерфейс, и Сontroller - это область логики, которая контролирует и управляет всеми ее составляющими и данными. Большинство современных фреймворком берут за основу именно архитектуру MVC. Так же в современном фреймворке используется шаблон проектирования Front Controller, который, в зависимости от запроса, перенаправляет его на нужный контроллер. Без Front Controller разработка с применением фреймворка не имела бы смысла.
Для того чтобы воспользоваться всеми возможностями фреймворка, необходим немалый багаж знаний в разработке приложений. PHP-фреймворки могут помочь устранить очень частую ошибку при программировании приложений, а именно повторение кода, а также систематизировать процесс разработки. Фреймворки являются мощным инструментом для быстроразвивающегося языка программирования как PHP, которые помогут организовать ваш код.
Каждый человек имеет различные предпочтения и потребности. Для одного разработчика использование PHP-фреймворков может помочь в ускорении процесса программирования, а для другого это может показаться пустой тратой времени. В большинстве случаев это зависит от уровня профессионализма, но, в общем, PHP фреймворки предназначены, чтобы сэкономить время и абстрагироваться от рутинных задач.
В основном, PHP-фреймворки применяются для разработки проектов сложнее чем 2-х-3-х страничный сайт с текстовыми страницами.
После проведения небольшого анализа и чтения отзывов о фреймворках от большого числа разработчиков разных уровней, с точки зрения удобства разработки, скорости, стабильности, было выделено 6 популярных PHP-фреймворков, которые отвечают большинству требований.
Zend framework - это PHP-framework, созданный и поддерживаемый компанией Zend, сотрудники которой являются непосредственными авторами языка PHP. Поэтому он следует традициям и духу PHP - базируется на простоте, объектно-ориентированных принципах, дружественной лицензии и тщательно тестируемом коде с применением agile методов.
Основные особенности:
1. Все компоненты полностью ориентированы на PHP 5 и E_STRICT- совместимы;
2. Встроенный генератор кода;
. Архитектура «используй только то что необходимо» с минимальными зависимостями компонентов;
. Использует легко расширяемый шаблон проектирования MVC, поддерживает макеты и PHP-скрипты представления по-умолчанию;
. Поддерживает множество различных баз данных включая MariaDB, MySQL, Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL, SQLite, and Informix Dynamic Server;
. Специальные классы для создания, отправки, получения email с помощью mbox, Maildir, POP3 и IMAP4;
. Гибкая подсистема кэширования с поддержкой множества хранилищ;
Недостатки:
1. Слишком большой;
2. Через чур многослойный;
. Очень медленный без кеширования;
. Очень сложная архитектура, без глубокого понимания шаблонов проектирования сложен в освоении;
. Слабое русскоязычное сообщество;
. Много мелких недочетов;
. Очень медленная скорость развития;
. Последняя версия требует PHP 5.2;
. Нет ORM.
CakePHP является быстроразвивающимся фреймворком для PHP, который предоставляет расширяемую архитектуру для разработки, обслуживания и развертки веб-приложений. Использует известный шаблон проектирования MVC, как и в объектно-реляционных фреймворках. Основной парадигмой CakePHP является увеличит продуктивность разработки и помогает программисту писать меньше кода. Изначально создавался как клон популярного Ruby on Rails, и многие идеи были заимствованы именно оттуда.
Особенности:
1. совместимость с PHP4 (до версии 1.3 включительно) и PHP5;
2. компоненты для авторизации, ограничения доступа (ACL), управления сессиями, cookies, представления древовидной информации (в виде Nested Sets)
. хелперы (компоненты) для генерации и заполнения форм, деления на страницы (paginate), управления кэшем, JavaScript (в том числе и AJAX)
. механизм интернационализации для работы сайта на множестве языков
. генерация SQL-запросов, в том числе для таблиц с отношениями один ко многим и многие ко многим, ORM
. Скаффолдинг и генерация CRUD-страниц для сущностей, Router::mapResources c Put Delete Get Post.
. Автогенератор кода Bake
. Миграции
. Консольная интеграция, класс Shell и задачи Task
. Плагины (как отдельные расширяемые приложения), компоненты и поведения,
. Поддержка Simple Test
. Слои (layouts) и темы (Themes)
13. Низкий порог вхождения - быстрая разработка, основана на соглашениях (взят курс на Ruby On Rails)
Недостатки:
1. Низкая производительность;
2. Слабая документация;
. Неустойчивость к CSRF-атаке;
. Нет сформированного русскоязычного сообщества;
. Сложный в понимании ACL;
. Строгие соглашения по именованию;
. Низкая скорость развития.
Проект Kohana был создан как ветвь PHP-фреймворка CodeIgniter под именем Blue Flame. Главной причиной ответвления был переход к более открытой для общественности модели разработки, потому, что многие пользователи были недовольны скоростью разработки и исправления ошибок в CodeIgniter. Rick Ellis - создатель и владелец CodeIgniter - подтолкнул новый фреймворк к созданию собственной документации и посоветовал переименовать проект. В июле 2007 Blue Flame был переименован в Kohana для того, чтобы избежать проблем с авторскими правами в будущем.
Название Kohana было выбрано, когда разработчики начали просматривать словари коренных американцев для того, чтобы выбрать слово, не нарушающее авторские права. Kohana на языке Сиу значит «быстрый». Также в японском языке имеет значение «маленький цветок», а на украинском «любимая» и имя известной косатки (Kohana) - все эти значения не имеют отношения к названию.
Особенности:
1. Высокая безопасность;
2. Хорошо прокомментированный код и встроенные средства отладки и профилирования;
. Прост в понимании;
. Использует парадигму MVC;
. Поддержка UTF-8;
. Очень легко расширяем;
. Есть ORM;
. Распространяется по лицензии BSD, то есть полностью свободен как для коммерческого так и бесплатного использования.
Недостатки:
1. Документация местами устаревшая, редко обновляется;
2. Слабая обратная совместимость между версиями;
. Слаборазвитый форум, большинство разработчиков общается через IRC;
. Нет никаких гарантий, что проект будет развиваться в будущем;
5. Нет сформированного русскоязычного сообщества
CodeIgniter - популярный MVC фреймворк с открытым исходным кодом, написанный на языке программирования PHP, для разработки полноценных веб-систем и приложений. Разработан компанией EllisLab, а также Риком Эллисом (Rick Ellis) и Полом Бурдиком (Paul Burdick).
Особенности:
1. CodeIgniter отличает простота, которая достигается благодаря следующим факторам:
2. Хорошая документация;
. Развитое сообщество;
. Фреймворк дает свободу программисту, не создавая каких-либо структурных ограничений и конвенций;
. Программисту не требуется учиться пользоваться генераторами кода из командной строки;
. CodeIgniter работает практически на любом хостинговом плане, который имеет поддержку PHP версии 5.1 и выше;
. CodeIgniter считается одним из быстрых и не требовательных к ресурсам фреймворков;
. Поддержка баз данных MySQL, PostgreSQL, MSSQL, SQLite, Oracle.
Недостатки:
1. Поддержка PHP4 тянет за собой лишний код;
2. Нет встроенной ORM;
. Нет встроенной системы разделения прав;
. Медленно развивается;
. Неустойчивость к CSRF-атакам.
Symfony - PHP фреймворк, имеющий большую библиотеку классов, который написан на PHP 5. Архитектура имеет полезные компоненты и отличные инструменты предназначенные для создания сложных веб-приложений.Symfony - свободный каркас <http://ru.wikipedia.org/wiki/Framework>, написанный на PHP5, который использует паттерн Model-View-Controller (MVC). Symfony предлагает быструю разработку и управление веб-приложениями, позволяет легко решать рутинные задачи веб-программиста. Symfony бесплатен и публикуется под лицензией MIT.
Особенности:
1. Поддерживает множество баз данных (MySQL, PostgreSQL, SQLite или любая другая PDO-совместимая СУБД);
2. Встроенные классы для работы с email;
. Гибкая система шаблонов в представлении;
. Встроенный кодогенератор;
. Поддержка французского спонсора Sensio;
. Очень гибок;
. Есть Dependency Injection;
. Высокая производительность.
Недостатки:
1. Сложен в освоении;
2. Подходит только для больших проектов;
. Отсутствие русской документации;
. Последняя версия требует PHP 5.3;
. Нет встроенной ORM;
. Нет русскоязычного сообщества.
Yii - это высокоэффективный основанный на компонентной структуре PHP-фреймворк для разработки масштабных веб-приложений. Он позволяет максимально применить концепцию повторного использования кода и может существенно ускорить процесс веб-разработки. Название Yii (произносится как Yee или [ji:]) означает простой (easy), эффективный (efficient) и расширяемый (extensible). Так же автор фреймворка, Qiang Xue говорит что название фреймворка изначально значило Yes It Is.
Особенности:
1. Высокая производительность;
2. Интерфейсы DAO и ActiveRecord для работы с базами данных (PDO);
. Поддержка интернационализации;
. Кэширование страниц и отдельных фрагментов;
. Перехват и обработка ошибок;
. Ввод и валидация форм;
. Аутентификация и авторизация;
. Использование AJAX и интеграция с jQuery;
. Генерация базового PHP-кода для CRUD-операций (скаффолдинг);
. Поддержка тем оформления для их лёгкой смены;
. Возможность подключения сторонних библиотек;
. Миграции базы данных;
. Автоматическое тестирование;
. Поддержка REST.
. Активное русскоязычное сообщество.
Недостатки:
1. Фреймворк все еще молодой;
Сравнение 6-ти популярных фреймворков по основным критериям (необходимый уровень знаний, сфера применения, документация и т.д.)
Таблица 1.1 Сравнение популярных фреймворков
Zend Framework 1 |
CakePHP |
Code Igniter 2 |
Kohana 3 |
Symfony 2 |
Yii 1.1 |
|
Описание |
Академически грамотный код. Очень гибок. Требует хорошего знания PHP и ООП. Придётся немного доводить под себя прежде, чем использовать. Сухая, но достаточно полная техническая документация. |
Много встроенного функционала. Всё довольно тесно интегрировано. Документация не в лучшем состоянии. |
Почти микрофреймворк. Очень лёгок для изучения. Отличная документация. Гибок. Легко использовать сторонний код. |
Быстр, гибок. Свой подход к модульности. Скудная документация. |
Активно использует командную строку, yaml. Мощный ORM, хорошая система view, генераторы кода, dependency injection для всего. Изучить очень непросто, несмотря на хорошую документацию |
Проще в изучении, чем Zend и Symfony. Вобрал лучшее от Rails. Неплохой AR, хорошая система view, генераторы кода. Довольно тесная интеграция. |
Необходимый уровень знаний |
PHP5, ООП, шаблоны проектирования. |
PHP, ООП, умение разбираться в исходном коде фреймворка. |
PHP, Основы ООП |
PHP5, ООП |
PHP5, ООП, ORM, консоль. |
PHP5, ООП. |
Предполагаемые проекты |
Средние - большие |
Маленькие - средние |
Маленькие - большие |
Маленькие - большие |
Большие |
Маленькие - большие |
PHP5.2 |
Да |
Да |
Да |
Да |
Нет |
Да |
Жёсткая структура каталогов |
Нет (рекомендации) |
Да |
Да |
Да |
Да |
Нет (рекомендации) |
Официальная поддержка интернационализации |
Да |
Да |
Да |
Да |
Да |
Да |
Сложность установки и настройки |
Высокая |
Низкая |
Низкая |
Низкая |
Высокая |
Средняя |
Требует настройки |
Много |
Немного |
Немного |
Немного |
Много |
Немного |
Полная поддержка ORM |
Нет |
Да (не очень удобна) |
Нет (можно использовать Doctrine <http://www.phpdoctrine.org/>)ДаДа (Propel <http://propel.phpdb.org/trac/>, Doctrine <http://www.phpdoctrine.org/>)Active Record |
|||
Документация и примеры |
Хорошая |
Имеется |
Отличная |
Скудная, местами отстаёт от кода |
В процессе написания |
Отличная |
Unit-тесты для исходного кода фреймворка |
Да |
Да |
Нет |
Да |
Да |
|
Англоязычное сообщество |
Да |
Да |
Форум, Wiki, туториалы, блоги |
Форум, блоги |
Да |
Да |
Русскоязычное сообщество |
Да <http://zendframework.ru/>Почти не активноДокументация <http://code-igniter.ru/>, форум <http://code-igniter.ru/forum/>, блогиНетНетДокументация <http://yiiframework.ru/>, форум <http://yiiframework.ru/forum/>, блоги |
|||||
Лицензия |
New BSD <http://www.opensource.org/licenses/bsd-license.php>MIT <http://ru.wikipedia.org/wiki/MIT_License>Своя <http://codeigniter.com/user_guide/license.html>BSD-styleMIT <http://ru.wikipedia.org/wiki/MIT_License>New BSD <http://www.opensource.org/licenses/bsd-license.php> |
1. Гибкость разработки и развития проекта;
2. Эффективное использование ресурсов сервера;
. Открытый код фреймворка;
. Легкость и надежность веб-разработок. Фреймворк состоит из базовых, проверенных, отлаженных функций и операций. Построен на базе объектно-ориентированного программирования;
. Постоянное развитие и совершенствование фреймворка;
. Большой объем сопроводительной документации, примеров по разработке на разных языках;
. Мировая популярность, большое количество разработчиков.
. Легкость сопровождения проекта в дальнейшем, так как разработка с применением фреймворка основана на определенных соглашениях.
. Фреймворк позволяет сконцентрироваться на решении архитектурных задач, а не базовых как при разработке без его применения.
Фреймворк позволяет узко решать поставленную задачу.
Одно из главных преимуществ фреймворка - это удобная разработка нестандартных проектов. Ни один крупный нестандартный проект (например, twitter.com, фотобанк с онлайн покупкой фотографий, сайт знакомств и т.д.) не делают на готовой CMS - они для этого не предназначены. Все оригинальные проекты разрабатывают на фреймворках.
Веб-проект, разработанный на фреймворке, развивается вместе с вашим бизнесом. Меняетесь вы - меняется сайт, достаточно лишь заменить отдельный блок (модуль), создать новый раздел или внести новизну в дизайне.
Из недостатков:
подход 1 файл = 1 класс;
очень много кода не используется и лежит мертвым грузом в проекте;
сложность в освоении.
Эти недостатки весьма условны, достоинств несравнимо больше.
При выборе PHP фреймворка, можно немного запутаться с тем, что он должен делать, и с тем для чего предназначен фреймворк и что он выполняет. Не каждый фреймворк поддерживает ORM-слой для работы с базами данных, имеет качественное сообщество и хорошую документацию. Это может не помешать если нужен простой фреймворк. Однако, если необходим фреймворк который бы удобен и прост в освоении, то необходимо тщательно подойти к вопросу выбора фреймворка и взвесить все «за» и «против».
Вопрос поддержки баз данных в PHP фреймворках очень важен. Например, CodeIgniter поддерживает MySQL, Oracle и SQLite, а фреймворк Kohana не поддерживает Oracle и SQLite. Часть фреймворков имеют встроенный ORM-слой, часть - нет. В зависимости от используемой базы данных для разработки проекта приходится выбирать тот или иной PHP фреймворк.
Для комфортного решения проблем должен иметь хорошее сообщество, не только с точки зрения размера, но и в качестве и в готовности помочь. Даже если это маленькое сообщество, но есть обратная связь от сообщества, это можно считать плюсом. Так же плюсом является наличие русскоязычного сообщества.
Часть фреймворк имеют слаборазвитую, устаревшую документацию. Часть не имеют русской документации. Поэтому перед выбором фреймворка необходимо убедиться в том что документация актуальна, вовремя обновляется и дополняется, и что инструкция по применению проста в понимании.
Ключевым фактором при выборе так же может являться производительность фреймворка, к примеру, часть фреймворков поддерживает кэширование на достаточном уровне, часть - нет.
Не все фреймворки устойчивы к различного рода атакам, поэтому перед выбором фреймворка необходимо тщательно проанализировать активность развития, размер сообщества, а так же наличие встроенных средств для защиты от атак.
Не все фреймворки просты в освоении, это очень важно учитывать при выборе, так как на освоение одного фреймворка может не хватить и года, а на освоение другого - хватит всего недели.
Так же следует учесть тот факт, что на одном фреймворке проект разрабатывается быстрее, на другом - нет. К примеру, разработки с применением фреймворка zend длится больше чем с применением yii.
Фреймворк также должен использовать MVC архитектуру. Если этого у вас нет, то быстренько, еще раз взгляните в предыдущий раздел, для того чтобы понять для чего он нужен. Большинство хороших PHP фреймворков имеют библиотеки, плагины, модули и расширения. Это очень хорошо для того чтобы реализовать большой круг функционала и усовершенствовать и ускорить процесс разработки.
Этот пункт так же очень важен, так как некоторые фреймворки обновляются раз в пару лет (codeigniter), а некоторые раз в пару месяцев. Это позволяет избежать использования старого, «необкатанного», недоработанного кода при разработке.
Не все фреймворки обратно совместимы, то есть, при обновлении фреймворка в проекте может возникнуть необходимость в полной переделке проекта. Часть фреймворков условно обратно совместима, к примеру, при обновлении младшей части версии(minor) все совместимо, а при старшей - нет. Так же большим плюсом является руководство по переходу на новую версию фреймворка.
Для примера, yii-фреймворк включает в себя jquery и jquery ui, а так же имеет встроенные средства для контроля подключенных скриптов и очередности их выбопнения, а codeigniter - нет.
Часть фреймворков требуют PHP 5.3, а часть будет работать и на PHP 4. Если ошибиться в выборе, то проект не будет работать на хостинге.
Любой человек может ошибиться при выборе PHP фреймворка, однако можно оградиться от такого рода ошибок. Поэтому необходимо убедиться, что выбранный фреймворк имеет достаточную функциональность и хорошую поддержку, т.к. обычно небольшие фреймворки создаются лицами, знания PHP которых в некотором роде ограничены. Это может вызвать различные ошибки и вопросы, которые в конечном счете мешают и замедляют процесс разработки.
Выбирая PHP фреймворк необходимо обращать внимание на то, насколько он легок в освоении и понимании. Это имеет очень важно значение для малоопытного PHP программиста. Также необходимо убедиться, что база данных и веб-сервер совместимы с архитектурой выбранного фреймворка.
Если не придерживать вышеуказанных требований, то возможны падения в производительности разработки проекта, производительности кода и легкости сопровождения. Другой распространенной ошибкой является неправильная установка фреймворка. При установке необходимо следовать инструкции, чтобы избежать ошибок.
В качестве проекта, для ознакомления с возможностями фреймворков, была выбрана разработка сайта-каталога одежды и обуви, который будет обладать следующими особенностями:
1. Товары разделены по категориям, с возможностью создания подкатегорий;
2. Удобная административная панель;
. Многоязычность, поддержка русского, румынского и английского языков;
. Поддержка высоких нагрузок(кэширование).
Для разработки такого проекта был выбран MVC-фреймворк yii, который обладает относительно низким «порогом вхождения» и большим русскоязычным сообществом.
Работу над созданием любого сайта можно разделить на следующие этапы:
1. выбор и установка необходимых инструментов;
2. разработка дизайна проекта и верстки;
. проектирование и создание базы данных;
. создание основы приложения и конфигурация;
. генерация каркаса кода с помощью кодогенератора Gii;
. установка верстки и доработка каркаса;
. настройка кэширования, многоязычности и «красивых» ссылок.
Для оптимизации разработки проекта, а также удобства, были использованы следующие приложения:
1. Пакет «denwer»;
2. Графический интерфейс «HeidiSQL» для управления СУБД MySQL;
. Редактор программного кода PhpStorm;
Каждое из этих приложений обладает рядом уникальных, незаменимых свойств, облегчающих разработку и тестирование web-приложения.
Denwer - портативный набор дистрибутивов и программная оболочка, созданный для отладки сайтов на локальной Windows - машине, без подключения к сети Интернет. Состав базового пакета:
· Apache2.2, SSI, SSL, mod_rewrite, mod_php;
· PHP5 с поддержкой GD и MySQL5;
· MySQL с поддержкой транзакций (mysqld - max);
· поддержка виртуальных хостов на основе папок из /home;
· система управления запуском и завершением;
· phpMyAdmin - система управления MySQL через Web - интерфейс;
· эмулятор sendmail (отладочная «заглушка», складывающая приходящие письма в /tmp); поддерживается работа совместно с PHP и Perl;
· установщик (нечто вроде InstallShield).
HeidiSQL - бесплатный клиент с открытым исходным кодом, а так же графический интерфейс для управления и администрирования СУБД MySQL (рис 2.1). Проект находится в активном развитии и поддерживает множество возможностей:
· Поддержка множества одновременно открытых подключений с помощью TCP/IP, именованных каналов или SSH-туннелирования, с возможностью сохранения авторизационных данных.
· Управление пользователями и их правами на сервере в рамках базы данных или глобально.
· Поддержка управления серверными переменными;
· Просмотр серверной статистики и управление запущенными процессами с возможностью проанализировать выполняемые SOL-запросы и прервать “плохие”.
· Поддержка экспорта баз данных в SQL файл или на другой сервер, с возможностью последующего импорта;
· Просмотр и управление базами данных, таблицами, отображениями, триггерами и хранимыми процедурами.
JetBrains PhpStorm - коммерческое IDE для PHP разработанное на основе платформы IntelliJ IDEA (рис. 2.2). Предоставляет «умный» редактор для PHP, HTML и JavaScript кода с поддержкой анализа качества кода «на лету» и продвинутыми возможностями автоматического рефакторинга. Дополнение кода полностью поддерживает все возможности PHP 5.3, включая пространство имен и замыкания. Ключевые особенности:
· Поддержка фреймворка для тестирования PhpUnit;
· Поддержка отладки PHP и JavaScript кода;
· Удаленная выгрузка по FTP, SFTP, сетевому диску с автоматической синхронизацией;
· Поддержка спецификаций HTML5 и EcmaScript 5.
· Интеграция с системами контроля версий:CVS, SVN, Git, Perforce, Mercurial;
· Интеграция с баг-треккерами.
Хороший дизайн может принести владельцу сайта много преимуществ перед конкурентами и материальную выгоду. В зависимости от того, какие цели ставит перед собой компания при создании сайта, дизайн может подтвердить или подчеркнуть статус компании - владельца, создать дополнительную рекламу компании или услугам, представить узнаваемый бренд и т.д.
Дизайн сайта выполнен в серебристо-пурпурных тонах (рис. 2.3). Серебристый цвет символизировать строгость, стиль, силу. Пурпурный подчеркивает стиль и дополняет его вкусом. Дизайн умеренно консервативен, традиционен и говорит о мужском стиле. Шапка сайта с логотипом и баннером отражает название и выгодное коммерческое предложение.
Во время проектирования база данных были выделены следующие таблицы:
· Таблица категорий «Category», которая хранит в себе название категорий на 3-х языках в древовидном виде Adjacency List: titleRu, titleEn, titleRo и parent;
· Таблица товаров «Price» с названиями и описаниями на 3-х языках, цену, размеры, наличие товара, а так же дату добавления и поле для связи с категорией: titleRu, titleRo, titleEn, descrRu, descrRo, descrEn, idCategory, cost, time, present, sizes;
· Таблица для хранения пути к фотографиям «Photo» с полем для связи с товаром: idItem, path;
· Таблица для хранения текстовых страниц «Text» с названиями и описаниями на 3-х языках, а так же красивым адресом для ссылок: titleRu, titleRo, titleEn, descrRu, descrRo, descrEn, name.
Помимо перечисленных выше полей каждая таблица обладает первичным ключом id для связи с другими таблицами и удобства управления записями.
При создании проекта использовался виртуальный хост в denwer, расположенный по пути z:\home\magazin.local\www. Использование виртуального хоста облегчает разработку и тестирование проекта.
Для создания приложения на основе фреймворка yii, необходимо загрузить последнюю версию с официального сайта www.yiiframework.com <http://www.yiiframework.com/>, распаковать и скопировать папку framework в z:\home\magazin.local\www. Так как для установки под denwer, инструкция отличается от официальной, то, перед установкой, необходимо отредактировать файл z:\home\magazin.local\www\framework\yiic.bat, указав в нем вместо php.exe полный путь к php: z:\usr\local\php5\php.exe. После этого необходимо запустить командный интерпретатор и ввести следующие команды:
C:\Users\root>z::\>cd \home\magazin.local\www:\home\magazin.local\www>framework\yiic.bat webapp magazin
При появлении вопроса «Create a Web application under 'Z:\home\magazin.local\www\magazin'? [yes|no]» необходимо нажать y, после чего будет создан каркас приложения и выведен список созданных файлов (рис. 2.4).
Созданная основа обладает рядом базовых функций, такими как встроенная авторизация, вывод статических страниц и т.д.
Для удобства переноса на другой web-сервер или хостинг, после создания, каркас приложения был вынесен из папки magazin на один уровень выше, а в index.php и index-test.php исправлен путь к фреймворку.
Файл конфигурации приложения расположен по следующему пути: protected/config/main.php. Файл описывает настройки приложения в виде ассоциативного php-массива. Для настройки подключения к бд был настроен компонент приложения db в секции components:
'db'=>array(
// строка в формате dsn для подключения к БД
'connectionString' => 'mysql:host=localhost;dbname=magazin',
// имя пользователя
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
После того как основа приложения создана и настроена, можно приступить к разработке контроллеров и моделей. Начиная с версии 1.1.2, фреймворк доступен вместе с встроенным генератором кода Gii. Gii позволяет генерировать модели на основе таблиц в базе данных, а так же CRUD-контроллеры для основных действий по управлению записями, такими как добавление записи (Create), просмотр списка записей, просмотр записи (Read), редактирование записи (Update) и удаление (Delete). Для активации Gii в файл конфигурации приложения было добавлено описание подключения модуля gii:
'gii'=>array(
'class'=>'system.gii.GiiModule',
// Пароль для входа в кодогенератор
'password'=>'generate',
// Разрешенные ip-адреса
'ipFilters'=>array('127.0.0.1','::1'),
),
После этого, для того чтобы зайти в Gii необходимо перейти по следующей ссылке в браузере: <http://magazin.local/index.php?r=gii/>. После авторизации будет доступен простой, удобный интерфейс для генерации кода (рис. 2.5).
Так как модель используется для управления записями в одной таблице, то были сгенерированы 4 модели: Price, Category, Photo, Text. Для этого использовался раздел Model Generator, в котором в качестве имени таблицы была указана *.
Для генерации CRUD-контроллеров, в Gii есть раздел Crud Generator. Так как таблица Photo является вспомогательной, то для управлению записями в ней не нужен отдельный контроллер, поэтому были сгенерированы 3 контроллера: PriceController, MenuController (для Category), TextController.
Представление в фреймворке yii - это специальный php-скрипт, состоящий из простых выражений, отвечающий за отображение элементов пользовательского интерфейса. У каждого представления есть имя, которое используется для поиска скрипта представления. Если имя представления test, то имя скрипта представления test.php.
Для отображения представления используется метод CController::render, которому передается имя представления и массив значений, который преобразуется в локальные переменные внутри представления. Например, если внутри действия update контроллера ItemController вызывается:
$this->render('update',array(
'model'=>$model,
'language'=>Yii::app()->language,
));
то, скрипт представления будет расположен по следующему пути: protected/views/item/update.php, а внутри него будут доступны две локальные переменные: $model и $language.
Внутри скрипта представления так же доступен экземпляр контроллера, к которому можно обратиться с помощью $this. Это позволяет использовать внутри представления свойства и методы контроллера, например, для отображения виджета, кэширования, вывода заголовка страницы и т. д.
Так же, при обработке скрипта представления неявно используется специальное представление - макет, который декорирует пользовательский интерфейс и может содержать такие элементы как шапка сайта и подвал. Внутри макета доступна локальная переменная $content, в которой хранится вывод скрипта представления. Макет, по-умолчанию, расположен по следующему пути: protected/views/layouts/main.php.
Виджет - это компонент, встраиваемый в представление, с целью отображения сложной, самостоятельной части интерфейса. Например, виджет может использоваться для вывода меню, таблицы и т. д.
Помимо виджетов, в фреймворке присутствует класс CHtml, статические методы которого позволяют выводить ссылки на основе заданных маршрутов(route), формы и её элементов ввода и т. д. Наиболее часто используемый метод это Chtml::link(<заголовок>,<маршрут в виде массива или строки>), который позволяет вывести ссылку на основе правил маршрутизации.
Все действия по установке верстки и доработке каркасы можно разделить на следующие пункты:
1. настройка макета;
2. настройка представлений видимых для посетителей;
. доработка правил валидации моделей и провайдеров данных;
. настройка представлений администратора;
При разработке проекта основным языком являлся английский, все остальные языки были добавлены с помощью файлов переводов и будут описаны позже в работе.
Установка верстки была начата с макета. Основные элементы, которые присутствуют в макете это шапка сайта, включая меню, меню категорий справа и подвал.
Для отображения меню сайта использовался виджет zii.widgets.CMenu, который очень просто подключается и настраивается:
<?php $this->widget('zii.widgets.CMenu',array(
// Список пунктов
'items'=>array(('label'=>Yii::t('menu','Home'), 'url'=>array('/price/index')),('label'=>Yii::t('menu','New'), 'url'=>array('/price/new')),('label'=>Yii::t('menu','Help'), 'url'=>array('text/index','page'=>'help')),('label'=>Yii::t('menu','Price'), 'url'=>array('/price/get')),('label'=>Yii::t('menu','Contact'), 'url'=>array('/text/index','page'=>'contact')),('label'=>Yii::t('menu','Logout'), 'url'=>array('/admin/logout'),'visible'=>!Yii::app()->user->isGuest),
),
)); ?>
где label - название пункта меню, url - маршрут(route) к контроллеру и действию, а visible - статус видимости пункта. Для отображения меню категорий товаров использовался виджет CTreeView, настройка которого полностью аналогична, за исключением формирования списка вложенных категорий, который был вынесен в отдельный виджет-адаптер - LeftMenu, который изначально разрабатывался для вывода меню слева, но в связи с неудобством интерфейса вынесен в правую часть.
Так же, для отображения заголовка страницы использовалось св-во контроллера $this->pageTitle.
Для отображения главной страницы с товарами, а так же страницы новинок использовался виджет zii.widgets.CListView:
<?php $this->widget('zii.widgets.CListView',array(
'dataProvider'=>$dataProvider,
'itemView'=>'_item',
'template'=>'{sorter}{items}{pager}',
'sortableAttributes'=>array(
'title'.ucfirst(Yii::app()->language),
'time',
'cost'
),
'pagerCssClass'=>'pager clear',
));?>
где dataProvider - провайдер данных, itemView - специальный файл представления отображающий одну модель в виде локальной переменной $data, template - шаблон вывода, sortableAttributes отвечают за сортировку данных по полям, а pagerCssClass использовался для настройки положения переключателя страниц. Провайдер данных - специальный компонент-адаптер, который отвечает за выборку моделей (записей) по определенному условию, их сортировку, а также за разбиение по страницам, будет рассмотрен позже в работе. Js-скрипт HighSlide был подключен в соответствии с описанием на оф. странице.
Отображение прайс-листа и остальных страниц было выполнено без применения виджетов в виде стандартного php-кода.
Так как модель отвечает за выборку и валидацию (проверку) данных, то в ней описываются условия выборки и проверки данных.
Правила валидации описываются в методе rules модели. Этот метод должен вернуть массив с описанием правил валидации, например:
public function rules()
{array(('titleRu,titleEn,titleRo','length','max'=>255,'min'=>4),('titleRu,titleEn,titleRo','required'),('parent', 'numerical', 'integerOnly'=>true,'allowEmpty'=>false),
);
}
Формат описания правила выглядит следующим образом:
array(<имя св-ва/св-в модели (полей в таблице)>,<псевдоним валидатора>,<имя доп. параметра валидатора 1>=><значение параметра 1>, …)
Каждое имя валидатора является псевдонимом класса. Это позволяет создавать и использовать свои классы валидации. Основные валидаторы:
1. default (CDefaultValueValidator) - присваивает значение по умолчанию выбранным атрибутам;
2. in (CRangeValidator) - проверяет, содержится ли значение атрибута в указанном наборе значений;
. length (CStringValidator) - проверяет, находится ли длина строкового значения атрибута в в указанном интервале;
. numerical (CNumberValidator) - проверяет, является ли значение атрибута числом;
. required (CRequiredValidator) - проверяет, не является ли значение атрибута пустым;
6. match: псевдоним класса CRegularExpressionValidator, проверяющего значение атрибута на соответствие регулярному выражению;
7. unique: псевдоним класса CUniqueValidator, который проверяет, является ли значение атрибута уникальными в пределах столбца таблицы базы данных;
Дополнительные параметры каждого из валидаторов подробно описаны в руководстве по yii.
После того как правила валидации были настроены, в модель были добавлены статические методы для выборки списка товаров. Каждой такой метод использует провайдер данных и выглядит примерно так:
public static function searchByCategory($category,$pageSize)
{
// создание условия выборки
$criteria=new CDbCriteria();
$criteria->select='Id, title'.ucfirst(Yii::app()->language).' as title,cost';
$criteria->addInCondition('idCategory',Category::getAllChildren($category));
// создание провайдера данныхnew CActiveDataProvider(__CLASS__,array(
// условие выборки
'criteria'=>$criteria,
// настройка постраничного вывода
'pagination'=>array(
'pageSize'=>$pageSize
),
// поддержка сортировки
'sort'=>array(
'defaultOrder'=>'title'.ucfirst(Yii::app()->language),
'attributes'=>array(
'title'.ucfirst(Yii::app()->language),
'time',
'cost'
)
)
));
}
Как видно из приведенного выше кода провайдер данных является экземпляром класса CActiveDataProvider (а так же потомком CDataProvider) и очень гибок в настройке.
Для вывода ссылок для администраторских действий необходимо проверка является ли пользователь администратором. Так как администратор всего один в системе и разделение прав не используется, то достаточно лишь проверки на авторизованность пользователя: if(Yii::app()->user->isGuest).
После того как были выведены все ссылки, были доработаны представления форм с учетом специфики моделей и правил валидации. Для этого использовались статические методы CHtml, ответственные за вывод полей ввода формы. Наиболее часто используемые методы CHtml для форм:
1. CHtml::activeLabelEx(<модель>,<имя св-ва>) - выводит заголовок поля ввода, где заголовок берется из метода attributeLabels модели, а так же помечает его красной *, если оно обязательное(имеет валидатор required).
2. CHtml::activeTextField(<модель>,<имя св-ва>) - выводит текстовое поле ввода.
. CHtml::activeTextArea(<модель>,<имя св-ва>) - выводит textarea-поле ввода.
4. CHtml::submitButton(<имя кнопки>) - выводит кнопку для отправки формы на сервер.
Для добавления фотографий использовалось расширение SwfUpload, использование которого подробно описано на странице руководства.
После того как все основные действия по доработке каркаса выполнены, осталось добавить поддержку больших нагрузок (кэширования), настроить многоязычность и красивые ссылки.
Для активации кэширования в файле конфигурации было добавлено описание компонента приложения cache с классом CFileCache, отвечающим за хранение кэша в локальных файлах.
Для настройки кэширования в контроллерах использовался компонент COutputCache, описанный в методе filters контроллера:
array(
// Компонент отключен для администраторских действий
'COutputCache -create, update, upload',
// Срок годности
'duration'=>24*3600*365,
// зависимости
'dependency'=>array(
'class'=>'CChainedCacheDependency',
'dependencies'=>array(
// по глобальному изменению pm_time
new CGlobalStateCacheDependency('pm_time'),
// по глобальному изменению cu_time CGlobalStateCacheDependency('cu_time'),
),
),
// данные в кэше отличаются по категории, сортировке, страницам, языку
'varyByParam'=>array('category','sort','page','lang'),
// и по статусу авторизованности пользователя
'varyByExpression'=>'Yii::app()->user->isGuest',
// кэш используется только для GET-запросов
'requestTypes'=>array('GET'),
),
где cu_time - последнее время обновления категорий, а pu_time - товаров и меняются по событию сохранения модели.
Так как, по-умолчанию, приложение уже поддерживает многоязычность с помощью класса CPhpMessageSource, который хранит переводы в php-файлах перевода, то в проекте использовался именно этот способ хранения.
Каждое сообщение перевода относится к какой-либо категории. Сообщения переводов хранятся по следующему пути: protected/messages/<код языка>/<имя категории>.php. Файлы переводы содержат в себе ассоциативный массив, где ключем является фраза на исходном (английский) языке, а значение - переведенное для данного кода (русский, например).
Для перевода сообщения, фреймфорк yii предоставляет статический метод Yii::t(<имя категории>,<сообщение>), а для хранения текущего языка в ссылке в файл конфигурации было подключено стороннее расширение в качестве компонента приложения urlManager: LangUrlManager.
Для активации «красивых», человекопонятных ссылок компонент приложения urlManager был настроен следующим образом:
'urlManager'=>array(
'class'=>'application.extensions.urlManager.CLangUrlManager',
//формировать ссылку в формате /route/p1/v1/p2/v2/...
'urlFormat'=>'path',
'rules'=>array(
// код языка всегда расположен впереди ссылки
'<lang:(en|ru|ro)>'=>'/price',
'<lang:(en|ru|ro)>/<_c>'=>'<_c>',
'<lang:(en|ru|ro)>/<_c>/<_a>'=>'<_c>/<_a>',
'<lang:(en|ru|ro)>/text/index/<page:.*>'=>'text/index',
),
// не выводить index.php в ссылке
'showScriptName'=>false,
),
а в корневой папке сайта (www) был добавлен файл .htaccess с активацией и настройкой mod_rewrite в web-сервере apache:
Options +FollowSymLinks*/*on%{REQUEST_FILENAME} !-f%{REQUEST_FILENAME} !-d. index.php
В Yii вложено много возможностей которые выделяют этот фреймворк на фоне остальных и делают разработку с его помощью очень быстрой и приятной.
Вот небольшой список который стоит выделить:
1. Отличная поддержка. Для русскоязычных пользователей на официальном форуме фреймворка создан собственный раздел где вы всегда можете получить ответы на свои вопросы. Плюс к этому мною было созданно русскоязычное сообщество <http://groups.google.com/group/yii-framework/> которое постоянно пополняется новыми материалами.
. Помощь от разработчика фреймворка. Большой плюс поддержки Yii - это возможность в любой день пообщаться и задать вопросы разработчику Yii на форуме. Было замечено что он практически каждый день просмотривает и отвечает на вопросы на форуме, помогает советами и полезными "фишками". Вы всегда можете написать ему личное сообщение и быть уверены что получите самый правильный ответ по вашему вопросу. К сожалению, разработчик фреймворка плохо знает русский язык, поэтому сообщения просим излагать ему на английском или китайском.
. Полная поддержка ООП. Фреймворк полностью заточен под пятую версию php что позволяет поддерживать весь функционал при обьектно ориентированном программировании. Разработчики не пошли на поддержку php4 в ущерб гибкости и удобства ооп. В связи с этим фреймворк не будет работать на php4, но зато отлично покажет себя на php5! Если вы знаете что такое ООП и умеете его использовать в php - тогда Yii лучший выбор для вас.
. Генератор кода. Yii предоставляет отличный встроенный генератор исходного кода. Указав лишь основные параметры - Yii генерирует для вас общую структуру приложения которая будет содержать все необходимые модели/контроллеры/отображения для старта. В yii версии 1.1 обещают браузерный генератор кода с еще большим функционалом!
. Темы. Благодаря встроенной поддержке тем вы можете изменять дизайн вашего приложения в пару нажатий клавиш.
. Защита. Все стандартные классы Yii заточены под высокий уровень безопасности что при умелом обращении позволяет полностью обезопасить свой сайт от Sql-Inj, XSS, CSRF и других атак.
Если честно то перечислять можно долго, и пятнадцатью пунктами список естественно не ограничится. Много из того что написанно выше - и стало для меня стимулом перейти на Yii Framework.
Джордж Шлосснейгл.Профессиональное программирование на PHP,2006.
Максим Кузнецов, Игорь Симдянов, Сергей Голышев.PHP 5 на примерах. БХВ-Петербург.2005, ISBN: 5-94157-670-6
А.Кухарчик. PHP: обучение на примерах. 240 стр., 2004 г. Издательство: Новое знание. ISBN 985-475-050-7
Леон Аткинсон, Зеев Сураски. PHP 5. Библиотека профессионала,2006
Джон Коггзолл. PHP 5. Полное руководство,2006.
Александр Мазуркевич, Дмитрий Еловой. PHP: настольная книга программиста.
<http://yiiframework.com/> - официальный сайт Yii Framework .
<http://yiiframework.ru/> - русскоязычное сообщество Yii .
BURAGA, SABIN. Proiectarea siturilor Web. Design şi funcţionalitate (ediţia a II-a). Bucureşti: Ed. Teora, 2005. 344 стp.
Verificarea starii si a parametrilor de functionare MySQL <http://www.lamp.ro/articole-tutoriale-optimizare-mysql/verificarea-starii-si-a-parametrilor-de-functionare-mysql/> [citat 15.11.2011]. Disponibil pe internet: <http://www.lamp.ro/articole-tutoriale-optimizare-mysql/verificarea-starii-si-a-parametrilor-de-functionare-mysql/>
СУЭРИНГ С, КОНВЕРС Т, ПАРК Д. PHP и MySQL. Библия программиста. Диалектика, 2010. 912 стр.
ОЛИЩУК А.В., ЧАПЛЫГИН А.Н. Разработка WEB приложений на РНР 5. Профессиональная работа: Вильяме. 2006. 352стр.