Пошаговое выполнение

Комментарии: 21  Просмотры: 19 842

В этом уроке мы рассмотрим, как действует Кохана после перехода по ссылке в браузере. Как вы помните, наш фреймворк имеет одну точку входа и это файл index.php в корне сайта, который запускается в любом случае. В нем устанавливаются названия директорий Приложения, Модулей и Системы (Ядра) и записываются в переменные. Далее устанавливается уровень вывода ошибок. После этого определяются полные пути к вышеназванным директориям и записываются в соответствующие константы. Их мы уже рассматривали — это константы APPPATH, MODPATH и SYSPATH. Уже ненужные теперь переменные с названиями директорий удаляются через unset, чтобы не занимать лишнюю память сервера. Следующий шаг — проверка на существование файла install.php. Если он существует, то в нем производятся различные тестовые действия для определения правильности установки фреймворка, после чего выполнение скриптов останавливается. Следовательно, убедившись, что все нормально установилось, нужно удалить (или переименовать) этот файл. Далее определяются две константы — константа времени запуска скрипта и константа использования памяти, нужные для профилирования, после чего подключается очень важный файл bootstrap.php. В нем мы также видим много различных параметров, в основном касающихся загрузки (а слово bootstrap так и переводится — начальная загрузка, загружать), а также подключения различных классов.
Давайте рассмотрим их. Первым делом происходит подключение самого ядра (core) Коханы. Далее производится проверка, а есть ли в нашей директории, которая по умолчанию находится в application, файл kohana.php. Ведь мы, если захотим, вполне можем переписать класс Коханы или какие-то из его методов при этом совершенно не затрагивая файлы в директории system.
Далее, как вы наверное помните, устанавливаются временная зона по умолчанию и локаль. Потом мы видим включение автозагрузки (autoload), установку языка по умолчанию и настройки окружения.
Следом идет инициализация Коханы с помощью статического метода Kohana::init(). Таким образом мы устанавливаем некоторые базовые настройки фреймворка, как, например, базовый URL или необходимость указания файла index.php в адресной строке браузера. Какие настройки бывают и их возможные значения, всегда можно посмотреть в комментарии к данному методу. Ну и конечно мануал по фреймворку никто не отменял.
Следующее, что мы видим — это настройки логирования, чтения конфигурации и подключения модулей. Список подключаемых модулей сделан в виде массива, где ключ — это название модуля, а значение массива — путь к модулю. Модули загружаются в таком же порядке, как они представлены в этом массиве. Чтобы модуль загрузился — достаточно просто раскомментировать его (или дописать, если модуль новый). Модули могут содержать свои собственные файлы инициализации init.php, которые добавляют Роуты (Route), характерные для подключаемого модуля.
Собственно последнее, что есть в файле bootstrap.php — это список Роутов. Изначально в Кохане только один роут по умолчанию — так называемый дефолтный, в котором происходит загрузка Контроллера welcome и запуск action — метода index. Естественно, мы можем добавлять свои роуты, но (ВАЖНО !) они обязательно должны находиться над дефолтным роутом, иначе они никогда не будут загружены. Смысл тут такой, что Кохана просматривает все роуты по порядку на соответствие адресной строке (вы помните, что адресная строка в Кохане выглядит примерно следующим образом: домен/контроллер/метод/параметр1/параметр2/……) и когда попадается нужный — использует его. А дефолтный роутер на то и дефолтный, что попадает под любое условие, поэтому он должен быть в конце, чтобы срабатывать, когда ни одно из условий не подошло.
Что происходит в загружаемом Контроллере, мы уже достаточно подробно рассматривали и будем рассматривать еще не раз, поэтому на этом мы останавливаться здесь не будем.
Теперь осталось только вернуться обратно в файл index.php, где последними строчками и происходит вывод сгенерированной страницы в окно браузера.
Вот такой вот простой и главное вполне логичный порядок выполнения. До встречи в следующем уроке.

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


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

Спасибо огромное за нужный труд! С нетерпением жду новых уроков!

Уважаемый Денис Васильевич.
У меня к вам огромная просьба.
На сколько я понимаю, исходя из своих скромных познаний в программировании, в Кохане активно используются паттерны проектирования. К сожалению весьма проблематично найти внятное и доступное разъяснение данных технологий для новичков. А разбор кода в лоб заводит в тупик. Не могли бы вы именно на примере данного фреймворка разъяснить этот вопрос. Мне кажется что это станет ключевым моментом в успешном изучении для многих.
С уважением….

Внятно и доступно про паттерны написано в книжке от так называемой «Банды четырех». Она так и называется «Паттерны проектирования». Авторы Эрик Фримен, Элизабет Фримен при участии Кэтти Сьерра и Берта Бейтса. Очень доступно написано с картинками !! Для лучшего запоминания. Свободно лежит в сети для скачивания. Просто не вижу пока смысла рассматривать, как в Кохане реализована скажем Фабрика. Мы просто этим пользуемся и все )

Перечитал по Кохане несколько блогов и горе-видео туториалов. Ваш подход ближе всего. Спасибо за ваш труд!

Подскажите один момент. Я начинал с нуля, одновременно изучая PHP и Kohana. Все понимаю и леплю как из кубиков в кохане. Но лепка это больше по заученности. Например нигде на разобрано банально например: $this->template->content = $content; Т.е. я то интуитивно понимаю что мы передаем в шаблон переменную. Но что значит $this и почему выходит что мы передаем content = $content; контент в контент. Не совсем понятны эти строчки. Заранее благодарен за любую помощь, а за маленький урок обзор вообще буду несказанно благодарен. Просто банально что если так и так написано, то передаем это туда то с помощью такого то символа.
Спасибо!

Извиняюсь! Нашел все что нужно, я думал это специфика каханы, оказалось это стандартный ООП.
Спасибо! За несколько дней освоил обсолютно новое для себя!

Вы абсолютно правы, это типичное ООП.
В двух словах — если внутри метода объявлена переменная, например, $content, то она и видна только внутри этого метода. Чтобы ее было видно в другом методе, мы можем передать ее в этот метод или использовать конструкцию $this. Т.е. если написать $this->content=$content, то внутри $this->content будет значение $content (но это две разные переменные) и ее уже будет видно внутри всего класса, т.е. во всех методах класса.

Спасибо огромное!

Всем доброго дня! Огромное спасибо за труд.
У меня два вопроса:
1. цитата — Какие настройки бывают и их возможные значения, всегда можно посмотреть в комментарии к данному методу. Ну и конечно мануал по фреймворку никто не отменял. — комменты, конечно, есть, но там довольно скудное объяснение, а мануал на английском. Мой инглиш, наверное не только у меня, не успевает за программированием (к сожалению) поэтому было-бы неплохо, если бы все таки детальные описания настроек кто нибудь сделал на русском.
2. Этот сайт (судя по организации регистрации) сделан на вордпрессе — почему не на кохане? На ней нельзя что-то реализовать, что можно на ворде или еще какая либо причина?
Заранее СПАСИБО за ответ.

1) Да собственно основные настройки, что там используются, мы и так рассмотрели. Как убрать индекс и базовый урл — точно.
2) Можно, почему нельзя. Просто чтобы написать блог со схожим функционалом, понадобится прилично времени, а его как всегда нет.

Спасибо, за оперативный ответ. По поводу первого вопроса, я имел в виду настройкм — Kohana::init(array(
перед ними идут на аглицком краткие описания задаваемых значений типа — boolean profile enable or disable internal profiling TRUE — что это логика и значение по умолчанию тру — это ясно, но для чего? и некоторые остальные то же, о подключаемых модулях даже боюсь спрашивать, это наверное, темы отдельных уроков.

1 — string base_url path, and optionally domain, of your application NULL
2 — string index_file name of your index file, usually «index.php» index.php
3 — string charset internal character set used for input and output utf-8
4 — string cache_dir set the internal cache directory APPPATH/cache
5 — boolean errors enable or disable error handling TRUE
6 — boolean profile enable or disable internal profiling TRUE
7 — boolean caching enable or disable internal caching FALSE

1 — базовый урл. Меняется, если у вас сайт находится не в корне, а где-нибудь в подпапке.
2 — название индексного файла. По умолчанию index.php. Можно убрать или поменять название.
3 — кодировка. По умолчанию ютф-8 (и пусть она таковой и остается).
4 — директория для кеширования. По умолчанию APPPATH/cache, можно поменять.
5 — вывод ошибок. По умолчанию включен.
6 — профилирование. Это вывод статистики, сколько ресурсов тратится на формирование страницы. По умолчанию включена. Чтобы увидеть статистику, в нужном шаблоне напишите < ?php echo View::factory('profiler/stats'); ?>
7 — внутреннее кеширование. По умолчанию выключено.

Спасибо, огромное за помощь.

Кстати у меня echo View::factory(‘profiler/stats’); почему то не работает.
Добавил в контролёр, как положено: vpaste.net/nO1dP

В bootstrap.php ‘profile’ включал: vpaste.net/ppQv9

Видиимо про профилирование нужно отдельно почитать.

У меня работает профилирование. Симпатишную табличку выдает )

«Следующий шаг — проверка на существование файла install.php. Если он существует, то в нем производятся различные тестовые действия для определения правильности установки фреймворка, после чего выполнение скриптов останавливается.»

Я так понимаю этот код можно вообще вырезать? Или это не будет хорошим тоном?

Можно. И некоторые так и делают. На форуме я цитировал статью ув. Актубы (кажется его статья была), где он производил твики фреймворка, правда версии 3.0, но суть та же.

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

в исходном коде страницы боди на нужном ожидаемом месте.. но вот когда смотришь через фаер баг то боди начинается в самом верху страницы..

Дочитал до данной строницы, если честно лень проверять все вышесказанное автором, я не любитель фреймворков, но я уважаю стандарты. Скажите чем отличается URL от URI? Роутеры коханы работают с URI? Если это так то что домен делат в URI?
Вопрос второй, где вы точно прочитали что unset явно освобождает память сервера?
Вопрос что такое переменная в вашем представлении раз она удаляется и как это происходит с помощью unset?

Ну если вам лень проверять, то мне лень отвечать. Впрочем про unset и память можете почитать например здесь:
http://habrahabr.ru/post/134784/



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

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