Анатомия фреймворка

Комментарии: 22  Просмотры: 53 721

В прошлом разделе мы немного забежали вперед, сразу перешли к редактированию кода и даже вывели что-то на экран. Но это общепринятая практика. Почти всегда изучение какого-нибудь языка программирования начинают с вывода фразы «Привет, мир !». Но пришла пора более подробно рассмотреть структуру фреймворка, чтобы понять, как он работает и, собственно, как нам с ним работать.

В разделе Установка и настройка уже немного говорилось о его структуре. Как вы наверное помните, Kohana имеет одну точку входа — это файл index.php. И лежит он в самом корне сайта. Также там находится файл .htaccess, в котором происходит избавление от файла index.php в адресной строке и вообще включается mod rewrite (это как раз те самые красивые адреса вида http://mysite.ru/portfolio/vasya_pupkin, их еще называют ЧПУ — Человеко-Понятные Урл). Ну и имеются три папки: application, modules и system.

Начнем с папки modules. В ней находяться следующие папки (модули):

auth — модуль авторизации,
cache — модуль кеширования,
codebench — модуль для тестирования,
database — модуль для работы с базой данных,
image — модуль для работы с изображениями
orm — модуль для работы с базой данных посредством orm
unitest — модуль для тестирования приложения
userguide — модуль документации.

Если вы откроете папку с любым модулем, то увидите, что структура папок в них очень похожа. Т.е. обычно мы там видим папку classes с классами данного модуля, папку config с файлами конфигурации, иногда файл init.php, который запускается при подключении модуля, иногда папку видов — views и возможно еще другие папки, в зависимости от модуля.

Посмотрим, что же находится в папке system. А там находятся все файлы, которые относятся к ядру фреймворка. Изменять их нельзя, я уже про это говорил. Если вы хотите что-то поменять, то делать это нужно в папке разработки приложения — папке application. Если заглянуть в нее и сравнить содержимое с содержимым папки system, видно, что их структура практически одинакова. Почему это так, спросите вы ? Это сделано для удобства. Если нам нужно изменить какой-то класс, нельзя делать это в папке system. Зато мы можем скопировать нужный класс в свою папку application и там уже видоизменять его. Kohana сначала пытается найти подключаемый файл в папке application, а уже потом, если его там не обнаружено, ищет его в папке system. Таким образом мы можем редактировать классы фреймворка, не затрагивая ядро. Папку system вообще можно вынести за пределы web-server-а (а при наличии нескольких проектов так и делают и эти проекты используют общие файлы — общее ядро) и при обновлении фреймворка просто перетирать ее, при этом сайты будут спокойно продолжать работать.

Приведу пример. В system есть папка i18n. Это папка с переводами, т.е. существует возможность сделать ваше приложение мультиязычным. Изначально там три файла: для английского, испанского и французского языков. Если вам нужен еще какой-то язык, то создавать новый файл мы будем уже не в \system\i18n, а в \application\i18n. Указываем в настройках (файл bootstrap.php) нужный язык и тогда Kohana будет искать файл сначала в папке application и уже потом, если этот файл не будет найден, поиск продолжиться в папке system.

Давайте посмотрим, что еще есть в папке system. Папка classes содержит уже готовые классы, которые можно использовать в приложении. Папка config содержит файлы конфигурации, необходимые для работы классов. В папке guide лежат справочные материалы по работе с классами. Папка media предназначена для хранения каких-то медиа-файлов. Папка messages содержит различные сообщения. Если вы заглянете в нее, то увидите файл validation.php, с массивом сообщений об ошибках валидации. В папке tests находится все, что относится к модулям тестирования. В папке utf8 находятся файлы-заменители функций, которые в PHP некорректно работают с кодировкой UTF8. Создатели фреймворка Kohana учли это и вместо стандартных функций PHP нужно использовать фунции, находящиеся в этих файлах. Ну и наконец папка views содержит стандартные Виды фреймворка, например страницу, на которой генерируется сообщение об ошибке.

В application, практически аналогичная структура папок. Дополнительно в ней имеется папка cache, в которую попадают закешированые файлы при использовании модуля кеширования. Также есть папка logs, в которой хранятся логи. Помимо папок здесь лежит очень важный файл bootstrap.php. Его мы рассмотрим подробнее чуть позже.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 22 коммент.

Я вот одно не пойму, зачем в папке
\system\classes\ лежат файлы типа
class Arr extends Kohana_Arr {}
а в папке
\system\classes\kohana\ файлы
class Kohana_Arr
Все равно если хочется расширить класс, нужно создать его в application\classes\ а не дописывать тот, который в system\classes\

Сделано для возможности замены класса своим, или добавления/замены своими методами

кто сказал что надо в аплиейшин? в документации ясно написано, систем — это фреймворк, аппликейшн — твоё приложение. хочешь добавить специфику приложению переделав фукнцию фреймворка, делаешь как ты написал, кочешь сделать свою версию аля Кохана-сам-пан-склепав-эдишн, дописываешь в файлы в систем класис. я уже так научил версию 3.2 недостающей фукнцией request::uri($param=null):)

Ну если ядро потом не планируется обновлять, то можно в принципе.

Нужно у них спросить)
Если классы вынести из \system\classes\kohana\
в \system\classes\ и class Kohana_Arr переименовать в class Arr без всяких extends, которые все равно не используются, то было-бы меньше файлов)
Вот недавно наткнулся на http://laravel.com/ — очень напоминает кохану, только еще меньше и код мне понравился, но под 5.3 Фреймворк молодой совсем, но интересный.

Нуу..мне тоже эта цепочка из наследований не очень нравится :) Просто уже знаю и лезу сразу в папку Kohana :)

А там находятся все файлы, которые относяться к ядру фреймворка.

Также есть папка logs, в которой храняться логи

уберите лишние мягкие знаки, а то как то не серьезно получается =)

Спасибо, исправил. Просто вбивал сразу в вп и провтыкал.

Здравствуйте Денис.
Начал изучать Kohana (первый framework). Планирую сделать что типа фотокаталога с просмотром в виде галерей.

Вопрос:
галереи делаются в виде модуля?
или
с помощью 1-2 контроллеров(+MV)?

Зависит от задачи. Если нужен просто сайт — фотокаталог, то можно делать как обычный сайт. Если планируется использовать галерею на других сайтах, то тогда лучше как модуль.

Денис спасиб за предыдущий ответ, неожидал такую оперативность.
То есть модуль это как отдельное приложение написанное для kohana, которое можно будет потом прицеплять к другим версиям (если конечно ядро сильно не изменится), — верно?

Угу. Даже цмс-ки на кохане поставляются в виде модулей. Gleez CMS по крайней мере точно.

Ясно благодарю.

Здравствуйте, Денис. Иногда встречаю такое: автор какого-либо проекта пишет, что надо папки application,system,modules вынести на уровень выше www. На Денвере это возможно. А я исп. локально xampp, в нем нет папки www, там прямо в папку проекта грузится все.
Везде встречаю только описание стандартной установки. Как бы узнать о нестандартной? Заранее благодарен.

А в чём проблема? Редактируете index.php, bootstrap.php и переносите application, system и modules куда нужно

Действительно. У каждого дистрибутива свои приколы и описывать, куда копировать файлы для каждого, это по-моему физически нереально.

проблема в том что их не можно вынести куда угодно — только в ветке файловой системы, обозначеной как докьюмент руут в настройках апача. плюс настройки для каждого домена могут ограничивать пхп опен-дир настройкой, за пределы которой пхп вылезти не может.

Здравствуйте! извините а как вы в xampp сделали чпу, то есть убрали индексный файл из адресной строки???

проблема в том что их не можно вынести куда угодно — только в ветке файловой системы, обозначеной как докьюмент руут в настройках апача. плюс настройки для каждого домена могут ограничивать пхп опен-дир настройкой, за пределы которой пхп вылезти не может.

А вас слова «в настройках апача», «пхп опен-дир настройкой» не смущают? Разве нельзя прописать там пути «куда угодно»?

Автор, очень, очень интересно пишите! Продолжайте в том же духе! Уже 4 часа в Вашем блоге сижу не могу оторваться. Это мой первый фреймворк, раньше все изобретал велосипед, но в один прекрасный момент сказал себе хватит и мне посоветовали Кохану!

Спасибо за отзыв. Сейчас, увы, уроки выходят намного реже. Очень загружен работой + своими проектами. Сейчас занимаюсь их раскруткой, прилично углубился в сео и надо многое переделать.

автор: Kohana сначала пытается найти подключаемый файл в папке application, а уже потом, если его там не обнаружено, ищет его в папке system.

Последовательность поиска такая: application > modules > system
см. http://kohanaframework.org/3.2/guide/kohana/files



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.