Вступление
Для начала нужно скачать и распаковать W framework в одну из папок на web сервере, скачать framework можно здесь или здесь. Я framework буду располагать в папку, доступную по адресу http://localhost/wframework/ в случае локального web сервера, на удаленном(реальном) web сервере аналогично - framework помещаем в папку, доступную по адресу http://mysite.com/.
В данной стать рассматривается W framework версии - 0.3.0.
Далее, W framework имеет следующий структуру папок и файлов:
- applications/ - содержит все пользовательские и системные экшены;
- engine-client/ - содержит клиентскую часть frameworka, которая представлена в виде javascript-плагинов;
- engine-server/ - содержит серверную часть frameworka, которая представлена в виде php-классов;
- projects/ - содержит все проекты которые работают на содержимом папок engine-client/, engine-server/ и пользовательском коде, который хранится в папке applications/ в виде экшенов;
- index.php - php-файл который обрабатывает все запросы W frameworka;
- index.js.php - php-файл, генерирующий необходимый js-код для работы W frameworka;
- w.htaccess - переименованный файл конфигурации apacha;
- LICENSE - файл с текстом лицензии, рекомендуется к ознакомлению;
- README - краткое описание W frameworka;
Рекомендуемые права доступа на папки и файлы:
- applications/ 0755;
- engine-client/ 0755;
- engine-server/ 0755;
- projects/ 0777;
- index.php 0644;
- index.js.php 0644;
- ./ 0777;
Также хотелось упомянуть что W framework рассчитан в первую очередь на программиста, хорошо владеющего языками программирования PHP и JavaScript!
Папка engine-server/
Папка engine-server/ - содержит php-классы, которые обеспечивают работу самого frameworka и генерация, обработку и передачу данных клиенту в удобном для последнего виде. Классы могут находится в произвольных папках, тут нет ничего особенного, единственное - это правила именования классов - [тип класса(.)имя класса(.)расширение файла], например - abstract.MyClass.php. Также стоит упомянуть, что встроенному авто загрузчику php классов, необходимо что б имя класса совпадало с именем класса в названии файла с учетом регистра.
Файл index.php
Файл index.php является базовым файлом frameworka и к нему по умолчанию адресуются все запросы. Далее, файл имеет ряд php констант которые определяют некоторые параметры W frameworka и пути, названия системных папок.
- D - содержит разделитель для каталогов в путях к папкам или файлам, определяется автоматически, в зависимости от платформы;
- SD - ...;
- AP - содержит абсолютный путь к директории, содержащей текущий файл;
- CHAR - содержит название кодировки, которое используется при отдаче контента клиенту;
- ENGINE - содержит название(путь к) папки(е), где располагаются классы серверной части frameworka, например ../engine-server, относительно текущей папки;
- CENGINE - содержит название(путь к) папки(е), где располагаются js-файлы клиентской части frameworka, например ../engine-client, относительно текущей папки, рекомендуется не менять!;
- APP - содержит название(путь к) папки(е), где располагаются пользовательские экшены frameworka, например ../applications, относительно текущей папки, рекомендуется не подымать выше текущей корневой директории, так как содержит статические файлы!;
- PRJ - содержит название(путь к) папки(е), где располагаются шаблоны страниц, файлы конфигурации, лог-файлы, какие либо статические файлы и файлы некоторых систем кэширония frameworka, например ../projects, относительно текущей папки, рекомендуется не подымать выше текущей корневой директории, так как содержит статические файлы!;
- ROOT - произвольная константа, может использоваться для защиты некоторых php-файлов от прямого исполнения;
- PROJECT - содержит название текущего проекта. В данном случае используется авто определение название текущего проекта, название текущего проекта выделяется из ссылки http(s)-запроса, по умолчанию это содержимое переменной - $_GET['PRJ'], если такая переменная не существует, проектом по умолчанию является проект - "project1";
Далее, я напишу о том что же далее происходит в файле index.php, на первый взгляд код возможно Вам покажется непонятным но самом деле все происходит следующим образом:
Некой переменной - $obj присваивается экземпляр класса Prototype(в конструктор класса Prototype передается многомерный ассоциативный массив с произвольными значениями, это тонкости работы php), переменная $obj - является объектом и благодаря реализации php интерфейса ArrayAccess, можно динамически создавать произвольные свойства объекта, хранящемуся в переменной $obj. Далее $obj присваиваем экземпляры необходимых классов, каждый класс который присваивается произвольному свойству $obj должен наследовать класс Object, который обеспечивает передачу ссылки на глобального объекта, который хранится в переменной $obj и доступ к к персональным настройкам каждого класса(также может быть получен доступ и к настройкам других классов), которые хранятся в файле config.php, подробнее про этот файл в одной из следующих статей. Перед присваивание системных и пользовательских классов переменной $obj, в переменную $obj['settings'](по умолчанию) - присваиваем содержимое файла config.php. Файл config.php обычно хранится в папке текущего проекта, и путь к ниму определен в файле index.php. В итоге получается своеобразное объектное дерево, что-то DOM-дерева в браузерах, к которому есть доступ из JavaScript.
Достоинствами такого подхода является: вездесущая работа с объектами, что позволяет полностью забыть о статических методах и свойствах. У Вас может возникнуть еще один вопрос, зачем нужен выше написанный абзац? Приведу пример для пояснения: Вы написали сайт, где все данные хранятся БД - MySQL, но вот сложилась такая ситуация, нужно сменить БД на PostgreSQL. Дело в том что в W frameworke нет такого понятий как драйвер БД, модуль, плагин, а экшены вообще предполагают наличие кода написанного процедурным(подходом, стилем) и единственным методом, с помощью которого можно сменить класс для работы с другой БД - является работа с классом от другой БД. Как это выглядит на практике - экземпляр объекта для работы с БД хранится в переменной, для наглядности приведу строку кода -
Файл index.js.php по своей структуре похож на файл index.php, но в отличии от первого выполняет другую роль, его роль заключается в генерация JavaScript файла, который содержит необходимые настройки, контроллер и в процессе работы js-программы подгружает необходимые w-плагины, написанные на JavaScript, пользовательский js-код и файлы локализации. Этот генерируемый клиентский конфигурационный файл составляется из следующих файлов: index.js - содержит первичные настройки клиентской части frameworka, так же является шаблоном, в который включается содержимое файлов config.js(располагается в папке с текущим проектом) и контроллера(генерируется динамически в файле index.js.php классом CController). Описание этих файлов Вы найдете в одной из следующих статей.
Так же стоит упомянуть, что такое контроллер, контроллер - это абстрактное понятие, по другому его можно назвать пространством имени(namespace), группирует произвольный набор экшенов по определенным признаком, этим признаком является какая нибудь определенная страница, в разных контроллерах экшены могут повторятся. Например: страница home - контроллер также назовем home, состоит из экшенов head, left, body, foot; а страница catalog - контроллер соответственно cat состоит из head, cat, left, foot.
Папка engine-client/ содержит файлы с js-кодом, в предыдущих версия использовалась библиотека jQuery, но в текущей версии я решил отказаться от использования библиотеки jQuery, так как много кто из программистов использует и другие JavaScript библиотеки. В результате я написал JavaScript библиотеку w, так же это является своего рода платформой для создания w-плагинов. w-плагины именуются следующим образом: [w(.)имя плагина(.)расширение файла], например - w.ajax.js. Сама библиотека очень схожа с библиотекой jQuery и именуется следующим образом - w.js.
Папка applications/ содержит экшены, которые доступны в любом проекте, то есть один и тот же экшен можна использовать в нескольких проектах. Каждый экшен располагается в отдельной папке, и я рекомендую именовать экшены следующим образом - [имя проекта(.)тип экшена(.)имя экшена], тут надо пояснить тип экшена - экшены могут быть двух типов, те которые обрабатывают данные(set) и те которые возвращают данные(get), например: project.get.action1 или project.set.actionX. Далее, в папке с экшенов обязательно должен находится файл настроек экшена, название этого файла задается в файле config.php, который располагается в текущем проекте, по умолчанию данный файл называется sett.php. Файл sett.php имеет ряд параметров, которые более подробно будут рассмотрены в одной из следующих статей, среди которых есть такие параметры: model - php-файл который должен возвращать какие либо данные клиенту; view - js-файл, задумывался как файл отвечающий за вид, а вышел клиентский контроллер; l10n - js-файл который отвечает за локализацию проекта, локализация web приложений написанных на W frameworke возможна только на клиенте. Подробнее об этом всем в одной из следующих статей.
Папка projects/ проекты, которые работаю на текущем экземпляре W frameworkа. Каждый проект располагается в отдельной папке и может иметь любое название, с названиями желательно без фанатизма, права на папку с проектом рекомендуется ставить - 0777, так как в эту папку могут записываться(в зависимости от настроек) некоторые системные данные или результаты кэширования, которые имеют непосредственное отношение к текущему проекту. В папку проекта рекомендуется складывать все файлы относящиеся к текущему проекту и канешно же наиболее часто упоминаемый файл config.php. Подробнее о содержимом(при настройках используемых мною, автором), будет написано в одной из следующих статей.
Так же хотел упомянуть, папка ./ должна иметь права 0777 потому что в ней могут быть созданы некоторые временные папки, согласно настроек по умолчание, а именно папки для хранения сессий. Дело в том что стандартная сессия - полная хрень, используется альтернативная файловая сессия, которая создает временную папку для хранения файлов в корневой директории.
Так же если Вы создаете готовое web-приложение на W frameworkе, и Вашим сервером является apache2, рекомендуется раскомментировать файл w.htaccess, то есть переименовать его в .htaccess, если же Вы используете какой либо другой web-сервер, то настоятельно рекомендуется применить какой либо другой способ для защиты php-файлов от прямого исполнения.
$obj['storage']['db'] = new DBQueryMySQLi($obj);
заменяем следующей строкой кода - $obj['storage']['db'] = new DBQueryPostgreSQL($obj);
, так же стоит заметить, что классы DBQueryMySQLi и DBQueryPostgreSQL должны наследовать один интерфейс, в W frameworke - это абстрактный класс DBQuery, аналогично можно поступить и с любым другим классом в frameworke. Еще один пример: нужно работать с двумя БД одновременно. Код будет иметь следующий вид: $obj['storage']['db'] = new DBQueryMySQLi($obj);
$obj['storage']['db1'] = new DBQueryMySQLi1($obj);
, класс DBQueryMySQLi1 имеет следующий вид - class DBQueryMySQLi1 extends DBQueryMySQLi {}
, следует так же отметить, что Вам в файле config.php придется написать еще одну конфигурацию к классу DBQueryMySQLi1, с другими параметрами, так будет обеспечиться работа с 2 БД.Файл index.js.php
Файл index.js.php по своей структуре похож на файл index.php, но в отличии от первого выполняет другую роль, его роль заключается в генерация JavaScript файла, который содержит необходимые настройки, контроллер и в процессе работы js-программы подгружает необходимые w-плагины, написанные на JavaScript, пользовательский js-код и файлы локализации. Этот генерируемый клиентский конфигурационный файл составляется из следующих файлов: index.js - содержит первичные настройки клиентской части frameworka, так же является шаблоном, в который включается содержимое файлов config.js(располагается в папке с текущим проектом) и контроллера(генерируется динамически в файле index.js.php классом CController). Описание этих файлов Вы найдете в одной из следующих статей.
Так же стоит упомянуть, что такое контроллер, контроллер - это абстрактное понятие, по другому его можно назвать пространством имени(namespace), группирует произвольный набор экшенов по определенным признаком, этим признаком является какая нибудь определенная страница, в разных контроллерах экшены могут повторятся. Например: страница home - контроллер также назовем home, состоит из экшенов head, left, body, foot; а страница catalog - контроллер соответственно cat состоит из head, cat, left, foot.
Папка engine-client/
Папка engine-client/ содержит файлы с js-кодом, в предыдущих версия использовалась библиотека jQuery, но в текущей версии я решил отказаться от использования библиотеки jQuery, так как много кто из программистов использует и другие JavaScript библиотеки. В результате я написал JavaScript библиотеку w, так же это является своего рода платформой для создания w-плагинов. w-плагины именуются следующим образом: [w(.)имя плагина(.)расширение файла], например - w.ajax.js. Сама библиотека очень схожа с библиотекой jQuery и именуется следующим образом - w.js.
Папка applications/
Папка applications/ содержит экшены, которые доступны в любом проекте, то есть один и тот же экшен можна использовать в нескольких проектах. Каждый экшен располагается в отдельной папке, и я рекомендую именовать экшены следующим образом - [имя проекта(.)тип экшена(.)имя экшена], тут надо пояснить тип экшена - экшены могут быть двух типов, те которые обрабатывают данные(set) и те которые возвращают данные(get), например: project.get.action1 или project.set.actionX. Далее, в папке с экшенов обязательно должен находится файл настроек экшена, название этого файла задается в файле config.php, который располагается в текущем проекте, по умолчанию данный файл называется sett.php. Файл sett.php имеет ряд параметров, которые более подробно будут рассмотрены в одной из следующих статей, среди которых есть такие параметры: model - php-файл который должен возвращать какие либо данные клиенту; view - js-файл, задумывался как файл отвечающий за вид, а вышел клиентский контроллер; l10n - js-файл который отвечает за локализацию проекта, локализация web приложений написанных на W frameworke возможна только на клиенте. Подробнее об этом всем в одной из следующих статей.
Папка projects/
Папка projects/ проекты, которые работаю на текущем экземпляре W frameworkа. Каждый проект располагается в отдельной папке и может иметь любое название, с названиями желательно без фанатизма, права на папку с проектом рекомендуется ставить - 0777, так как в эту папку могут записываться(в зависимости от настроек) некоторые системные данные или результаты кэширования, которые имеют непосредственное отношение к текущему проекту. В папку проекта рекомендуется складывать все файлы относящиеся к текущему проекту и канешно же наиболее часто упоминаемый файл config.php. Подробнее о содержимом(при настройках используемых мною, автором), будет написано в одной из следующих статей.
Заключение
Так же хотел упомянуть, папка ./ должна иметь права 0777 потому что в ней могут быть созданы некоторые временные папки, согласно настроек по умолчание, а именно папки для хранения сессий. Дело в том что стандартная сессия - полная хрень, используется альтернативная файловая сессия, которая создает временную папку для хранения файлов в корневой директории.
Так же если Вы создаете готовое web-приложение на W frameworkе, и Вашим сервером является apache2, рекомендуется раскомментировать файл w.htaccess, то есть переименовать его в .htaccess, если же Вы используете какой либо другой web-сервер, то настоятельно рекомендуется применить какой либо другой способ для защиты php-файлов от прямого исполнения.
Комментариев нет:
Отправить комментарий