Что же такое Kohana ? icon

Что же такое Kohana ?




Скачати 289.63 Kb.
НазваЧто же такое Kohana ?
Дата28.05.2013
Розмір289.63 Kb.
ТипДокументи

Фреймворк — это каркас сайта, который позволяет ускорить процесс разработки, т.е. не писать какие-то повторяющиеся участки из проекта в проект, а сделать основной упор именно на логике. Если вы достаточно давно занимаетесь веб-разработкой, то у вас определенно есть какие-то готовые классы или функции, которые вы используете в своих проектах. Такой вот набор готовых к использованию библиотек — это по сути и есть фреймворк. Но любой разработчик, с ростом опыта, приходит к выводу, что его старый код (фреймворк) никуда не годится и его надо переделывать. Так почему не использовать сразу уже готовый фреймворк, такой как Kohana, который к тому же написан очень грамотно.

Что же такое Kohana ?

Kohana — это веб-фреймворк с открытым кодом, основанный на PHP5 и использующий концепцию HMVC (Hierarchical Model View Controller — Иерахические Модель-Вид-Контроллер). Его основные цели — быть безопасным, легким и простым в использовании, и это действительно так.

Немного истории (материал из Википедии)

Kohana был создан как ветвь PHP фреймворка CodeIgniter. Первоначально он был известен под названием Blue Flame. Основной причиной форка («расщепления» на два отдельных проекта) был переход к более открытой для общественности модели разработки, из-за того, что многие пользователи были недовольны скоростью разработки и исправления ошибок в CodeIgniter. Rick Ellis — создатель и владелец CodeIgniter — был счастлив видеть форк своего проекта, но помогать отказался. Он подтолкнул новый проект к созданию собственной документации и посоветовал переименовать проект. В июле 2007года Blue Flame был переименован в Kohana для того, чтобы избежать проблем с авторскими правами в будущем.

Название Kohana было выбрано, когда разработчики начали просматривать словари коренных американцев, чтобы выбрать слово не нарушающее авторские права. Kohana на языке Сиу значит «быстрый». Также на японском языке имеет значение «маленький цветок», а на украинском «любимая» и имя известной косатки (Kohana) — все это не имеет никакого отношения к названию.

Особенности

  • Высокая скорость работы

  • Безопасность

  • Использование возможностей PHP5

  • Большое количество встроенных инструментов

  • Простота понимания

  • Использование концепции HMVC

  • Полная совместимость с UTF-8

  • Установка и настройка

  • Комментарии: 78  Просмотры: 19 178

  • Чтобы работать с фреймворком, нужно конечно иметь сам фреймворк. С этим нет абсолютно никаких проблем. Скачивание быстрое, бесплатное и по прямой ссылке. Заходим на официальный сайт Kohana —http://kohanaframework.org/ и там в правом верхнем углу будет большая оранжевая кнопка:
    http://kohanaframework.su/wp-content/uploads/2011/10/dl_kohana.jpgНа данный момент самая последняя стабильная версия — это 3.2.0 (собственно ее и изучаем). В дальнейшем возможно появятся более новые версии, так как данный фреймворк очень бодро развивается в отличие от Code Igniter-а.
    Все, что находится в архиве, (а это три папки: application, modules иsystem, а также несколько файлов) распаковываем в папку, где мы будем создавать сайт. На хостинге это обычно папка http. Но туда заливать архив еще рано. Пока будем работать локально, у себя на компьютере. У меня установлен Denwer и я распаковал архив в папку z:\home\kohana\www\. Предлагаю вам сделать тоже самое. Теперь нужно перезапустить Denwer и зайти по адресу http://kohana/. Если все сделано правильно, вы должны увидеть следующее:
    http://kohanaframework.su/wp-content/uploads/2011/10/success-268x300.jpg
    Внизу, на зеленом фоне, нам предлагают удалить файл install.php. Послушаемся и сделаем это. Если теперь обновить страницу, то мы должны увидеть набившую оскомину фразу hello, world!.
    Собственно это и все, у нас уже есть рабочий сайт, который даже выводит какой-то текст. А вот чтобы на страницах выводилось что-то другое, нужно уже копаться в файлах фреймворка. Для начала рассмотрим файловую структуру. Как вы уже заметили, фреймворк состоит из трех папок и четырех (пяти, но файл install.php мы удалили) файлов в корне. Файлы — это example.htaccess, в котором прописаны настройки сервера (как бы образец), index.php — основной файл, который является точкой входа. В нем производятся определенные настройки, например вывод ошибок, установка путей, а также происходит подключение файлов. Кажется, что там очень много всего, но на самом деле там почти все — это комментарии. Подробнее index.php будет рассмотрен позже.

  • Кстати в нем же находятся следующие строчки:

  • if (file_exists('install'.EXT))

  • {

  • // Load the installation check

  • return include 'install'.EXT;

  • }

  • с помощью которых и происходит загрузка того самого файла install.php, но перед этим идет проверка на его существование. А так как его нет, то … на нет и суда нет.
    Ну и последние два файла — это файл Лицензии и файл Readme. По идее их можно удалить, думаю разработчики Коханы не сильно обидятся.
    В папке system находится само ядро фреймворка. Крайне нежелательно там ничего менять. В папке modules, как понятно по названию, находятся различные модули. Например модуль работы с картинками, модуль авторизации, модуль для работы с базой данных и другие. Туда же можно добавлять и другие модули, которых там нет. Например, для работы с почтой. Ну и наконец папка application, где мы с вами и будем создавать свои проекты. И в следующем разделе мы этим уже займемся.

  • Первые шаги

  • Комментарии: 93  Просмотры: 19 805

  • Итак, Кохану мы благополучно установили. Давайте попробуем разобраться, откуда же появляется эта ужасная надписьhello, world! и даже попробуем заменить ее на что-то другое. Как я уже говорил, в Кохане точкой входа является файл index.php. Если вы его откроете, то почти в самом конце увидите подключение еще одного весьма важного файла под названием bootstrap.php. Чтобы вы не подумали, что я обманываю, вот код:

  • // Bootstrap the application

  • require APPPATH.'bootstrap'.EXT;

  • Если внимательно посмотреть на самое начало файла, то там консанта EXT как раз определяется (как .php), т.е. можно сделать так, что файлы будут иметь другое расширение (не .php) и таким образом всех запутать. Но лучше все-таки этого не делать.
    Ну а константа APPPATH — это собственно путь к файлу (который кстати можно гибко настроить). «Собирается» этот путь следующим образом (тут же в файле, рядышком):

  • $application = 'application';

  • ...

  • // Set the full path to the docroot

  • define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);

  •  

  • // Make the application relative to the docroot, for symlink'd index.php

  • if ( ! is_dir($application) AND is_dir(DOCROOT.$application))

  • $application = DOCROOT.$application;

  • ...

  • // Define the absolute paths for configured directories

  • define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);

  • Думаю тут все понятно — мы получаем абсолютный путь к нашему файлу (кстати совершенно аналогично пути прописаны и для двух других папок). Из всего этого видно, что искать файл bootstrap.php надо в папке application. Собственно там он и лежит, прямо в корне. Откроем его и посмотрим в самый низ. Там есть такие строчки:

  • /**

  • * Set the routes. Each route must have a minimum of a name, a URI and a set of

  • * defaults for the URI.

  • */

  • Route::set('default', '((/(/)))')

  • ->defaults(array(

  • 'controller' => 'welcome',

  • 'action' => 'index',

  • ));

  • Пока не будем сильно разбираться, что здесь написано, т.к. Роуты мы рассмотрим более подробно несколько позже. Но чисто визуально видно, что здесь прописан запуск контроллера по умолчанию и контроллером этим является контроллер welcome. А лежит он в папке application/classes/controller. Если мы заглянем в него, то увидим там классController_Welcome у которого есть метод action_index(), который как раз и выводит приветствие. Давайте поэкспериментируем и создадим еще один метод, например test:

  • public function action_test()

  • {

  • $this->response->body('test!');

  • }

  • Как нам теперь вывести test! на экран ? Есть два варианта. Можно прописать в bootstrap.php, чтобы этот метод запускался по умолчанию. Просто в Роуте меняем index на test, т.е. пишем:

  • Route::set('default', '((/(/)))')

  • ->defaults(array(

  • 'controller' => 'welcome',

  • 'action' => 'test',

  • ));

  • Запускаем и получаем нашу надпись. Ну или второй вариант (только верните index обратно). Запуск через так называемый ЧПУ (человеко-понятный УРЛ). Попробуйте ввести в адресной строке такой URL:
    http://kohana/welcome/test и запустите. Сработало ? На самом деле и не должно было. Так как мы не настроили Кохану до конца. В принципе, если мы поменяем адрес на такой http://kohana/index.php/welcome/test, то все запустится. Но выглядит это мягко говоря странно. Убрать этот index.php в адресной строке очень просто. В файле bootstrap.php есть настройки, в которые мы должны добавить одну строчку ‘index_file’ => FALSE:

  • /**

  • * Initialize Kohana, setting the default options.

  • *

  • * The following options are available:

  • ...

  • * - string index_file name of your index file, usually "index.php" index.php

  • ...

  • */

  • Kohana::init(array(

  • 'base_url' => '/',

  • 'index_file' => FALSE

  • ));

  • Если почитать комментарий, то видно какие параметры может принимать массив для передачи в статический метод initкласса Kohana. Среди них есть как раз ключ index_file, которому мы присваиваем значение FALSE, т.е. не хотим видеть файл index_file.
    Следующее, что нужно сделать, — это переименовать файл example.htaccess, который лежит в корне сайта, в .htaccess, чтобы включить модуль Mod Rewrite.
    Теперь если мы запустим наш первый вариант, напишем в адресной строке http://kohana/welcome/test, то увидим, что теперь все работает как надо.

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

  • Комментарии: 21  Просмотры: 15 695

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

  • В разделе ^ Установка и настройка уже немного говорилось о его структуре. Как вы наверное помните, 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. Его мы рассмотрим подробнее чуть позже.

  • Конфигурирование — Часть 1

  • Комментарии: 17  Просмотры: 15 258

  • Перед использованием Кохану необходимо настроить. Небольшие настройки мы уже произвели, они касались присутствия index.php в адресной строке. Для начала давайте пройдемся по файлу bootstrap.php, который находится в папке application. Первая настройка, которую мы сделаем в этом файле, касается временной зоны. Найдите следующие строчки:

  • /**

  • * Set the default time zone.

  • *

  • * @see http://kohanaframework.org/guide/using.configuration

  • * @see http://php.net/timezones

  • */

  • date_default_timezone_set('America/Chicago');

  • Кохана очень хорошо комментирована (правда на английском и некоторых это очень расстраивает). И здесь, если перейти по второй ссылке в комментарии, можно увидеть полный список поддерживаемых временных зон. Если вы не из Америки, пропишите нужную, например, Europe/Moscow.

  • Следующее, что нам нужно, — это установка локали по умолчанию:

  • /**

  • * Set the default locale.

  • *

  • * @see http://kohanaframework.org/guide/using.configuration

  • * @see http://php.net/setlocale

  • */

  • setlocale(LC_ALL, 'en_US.utf-8');

  • Опять же, за дополнительной информацией по поводу локали, переходим по ссылкам в комментарии.

  • В принципе эти настройки можно и не трогать или настроить их позже. Иметь правильное время — это конечно хорошо, но крайне необходимо иметь рабочие URL — адреса, ведь без них посетители никогда не смогут посмотреть ваше приложение. Поэтому пока пропускаем настройки вроде языка по умолчанию (тем более, что это пока ни на что особо не влияет) и переходим к очень важным настройкам — настройкам URL. Тем более, что мы их уже производили. Это уже знакомый нам статический метод инициализации — Kohana::init, который в качестве параметра принимает ассоциативный массив с парой ключ-значение. Если вы выполняли все мои рекомендации, то выглядеть он должен следующим образом:

  • /**

  • * Initialize Kohana, setting the default options.

  • *

  • * The following options are available:

  • *

  • * - string base_url path, and optionally domain, of your application NULL

  • * - string index_file name of your index file, usually "index.php" index.php

  • * - string charset internal character set used for input and output utf-8

  • * - string cache_dir set the internal cache directory APPPATH/cache

  • * - boolean errors enable or disable error handling TRUE

  • * - boolean profile enable or disable internal profiling TRUE

  • * - boolean caching enable or disable internal caching FALSE

  • */

  • Kohana::init(array(

  • 'base_url' => '/',

  • 'index_file' => FALSE

  • ));

  • Ну а если у вас по другому, то исправьте это. Больше здесь трогать пока ничего не нужно, разве что можно изменить параметр base_url (базовый URL), но это только в том случае, если у вас сайт находится в подпапке. В этом случае нужно также поменять значение RewriteBase в файле .htaccess.

  • Переходим к настройкам окружения:

  • /**

  • * Set Kohana::$environment if a 'KOHANA_ENV' environment variable has been supplied.

  • *

  • * Note: If you supply an invalid environment name, a PHP warning will be thrown

  • * saying "Couldn't find constant Kohana::"

  • */

  • if (isset($_SERVER['KOHANA_ENV']))

  • {

  • Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));

  • }

  • Что это такое и для чего оно нужно. Очень часто во время разработки приложения нам нужны определенные функции, которые нежелательны, когда проект выложен в сеть. Например вывод какой-то информации или сообщений об ошибках. В Кохане можно быстро переключаться между режимами разработки, в зависимости от окружения. Добавьте перед условием строку Kohana::$environment = Kohana::DEVELOPMENT;. Таким образом мы перевели Кохану в режим разработки. С фреймворком идут следующие четыре константы: PRODUCTION, STAGING, TESTING иDEVELOPMENT. Т.е. готовый проект, подготовка, тестирование и разработка. Мы выбрали DEVELOPMENT, поскольку только начинаем разработку. Перед установкой готового проекта на рабочий сервер, не забудьте поменять значение наPRODUCTION.

  • Конфигурирование — Часть 2

  • Комментарии: 39  Просмотры: 12 722

  • Последнее, что мы должны сделать в файле bootstrap.php — это включить нужные модули. Для этого существует метод Kohana::modules, в который передается массив, где ключами являются названия модулей, а значениями — расположение самих файлов. Нам нужно просто раскомментировать те модули, которые мы будем использовать:

  • /**

  • * Enable modules. Modules are referenced by a relative or absolute path.

  • */

  • Kohana::modules(array(

  • // 'auth' => MODPATH.'auth', // Basic authentication

  • // 'cache' => MODPATH.'cache', // Caching with multiple backends

  • // 'codebench' => MODPATH.'codebench', // Benchmarking tool

  • // 'database' => MODPATH.'database', // Database access

  • // 'image' => MODPATH.'image', // Image manipulation

  • // 'orm' => MODPATH.'orm', // Object Relationship Mapping

  • // 'unittest' => MODPATH.'unittest', // Unit testing

  • // 'userguide' => MODPATH.'userguide', // User guide and API documentation

  • ));

  • Можно сделать это сейчас, если вы уже знаете, что вам понадобится, но лучше делать это в процессе разработки. Сюда же можно добавлять новые модули, например те, которые будут выкладываться у нас в разделе Модули или написанные самостоятельно. Пока здесь находятся все модули, которые идут в комплекте с Коханой и лежат в папкеmodules. Большая часть модулей требует определенной настройки. Все нужные модули и их настройки обязательно будут рассмотрены в процессе обучения. Пока можете раскомментировать последнюю строчку, в следующем разделе я расскажу зачем.

  • ^ Конфигурационный файл

  • Когда вы создаете свое приложение, устанавливаете или создаете какие-то модули, у вас появляются какие-то данные, которые могут меняться. И вам естественно хочется хранить их где-то в одном месте и иметь возможность легко получать к ним доступ.

  • В папке application есть папка config. В этой папке вы можете создавать свои конфигурационные файлы и потом обращаться к ним. Давайте немножко поэкспериментируем. Создайте в папке /application/config/ файл с названиемmysite.php и добавьте в него следующий код:

  • defined('SYSPATH') or die('No direct script access');

  • return array(

  • 'title' => 'Мой первый сайт на Кохане',

  • 'description' => 'Самый лучший сайт на свете'

  • );

  • Первая строчка — защита от прямого доступа к скрипту, хакеры теперь здесь не пройдут. Остальное — возврат массива с нашими данными. Теперь, чтобы получить доступ к этим данным, нужно использовать следующий код $site_config = Kohana::$config->load(‘mysite’). Будет произведен поиск файла с названием mysite.php в папке /application/config/ и если все в порядке, такой файл есть и в нем нет ошибок, то будет создан объект $site_config. Ну а чтобы получить сами настройки, используем метод get. Полностью код будет выглядеть так:

  • $site_config = Kohana::$config->load('mysite');

  • $title = $site_config->get('title');

  • $description = $site_config->get('description');

  • Можете проверить это, написав данный код в контроллере Welcome и добавив вывод echo $title . ‘ — ‘ . $description. Должна вывестись фраза Мой первый сайт на Кохане — Самый лучший сайт.

  • Можно вообще обойтись одной строчкой $title = Kohana::$config->load(‘mysite.title’) и echo $title тоже выведет нам заголовок.

  • Также можно использовать многомерные массивы:

  • defined('SYSPATH') or die('No direct script access');

  • return array(

  • 'title' => 'Мой первый сайт на Кохане',

  • 'description' => array(

  • 'main' => 'Самый лучший сайт на свете',

  • 'alt' => 'Пока не будет создан второй сайт'

  • )

  • );

  • И получать значения следующим образом:

  • $description_main = Kohana::$config->load('mysite.description.main');

  • $description_alt = Kohana::$config->load('mysite.description.alt');

  • echo $description_main . '
    ' . $description_alt;

  • Или еще вариант — использовать цикл foreach (особенно удобно передавать массив в Вид и там в нужном месте перебирать его с помощью этого цикла):

  • // Это Контроллер

  • $config = Kohana::$config->load('mysite');

  •  

  • // А это уже Вид

  • foreach ($config as $site_config)

  • {

  • if(is_array($site_config))

  • echo $site_config['main'] . '
    ' . $site_config['alt'];

  • else

  • echo $site_config . '
    ';

  • }

  • Выведет три строчки:

    Мой первый сайт на Кохане
    Самый лучший сайт на свете
    Пока не будет создан второй сайт


  • Код внутри цикла дан для примера. В Виде даже не вздумайте так писать :)

  • Таким образом видно, что вариантов работы с файлом конфигурации масса. Выбирайте такой, какой вам больше нравится.

^ Конфигурирование — Часть 3

Комментарии: 31  Просмотры: 10 109

Итак, все основные настройки мы произвели. В основном они касались файлов bootstrap.php и .htaccess. Также мы поучились создавать свои собственные конфигурационные файлы. Пришла пора проверить, все ли правильно настроено, чтобы уже наконец приступить к разработке какого-нибудь полезного проекта. В прошлом уроке я просил вас раскомментировать строчку ‘userguide’ => MODPATH.’userguide’. Если вы этого не сделали, сделайте сейчас. Теперь попробуйте перейти по адресу http://kohana/guide. Если вы буква в букву повторяли мои рекомендации (а я повторял :) ), то должны получить следующее:

документация

 

Получили ? Замечательно. Попробуйте понажимать на ссылки, они должны работать. Теперь у вас на локальном компьютере имеется полная документация по фреймворку, правда на английском языке. Можете пользоваться (но в конце разработки все-таки лучше выключить).

Если ничего не работает, еще раз проверьте, что вы:

  • Удалили файл install.php

  • Переименовали example.htaccess в .htaccess

  • Добавили в файле bootstrap.php в ассоциативный массив, передаваемый в метод init, строчку ‘index_file’ => FALSE

  • Раскомментировали строчку ‘userguide’ => MODPATH.’userguide’ в массиве, передаваемом в метод modules

Если все равно ничего не получилось и выдается какая-то ошибка (на экране и/или в папке логов, которая находится по адресу /application/logs/ и должна иметь права на запись), пишите в комментариях, попробуем разобраться.

Итоги

Хотя мы еще толком не начали разработку, на самом деле мы сделали многое. Мы изучили, как устанавливать и настраивать Кохану. В принципе, чтобы не повторять эти манипуляции каждый раз при создании нового проекта, вы можете где-нибудь сохранить фреймвкорк с обновленными настройками. Вот и все. В следующем уроке будут более подробно рассмотрены контроллеры, а также виды. Мы попытаемся сделать что-то покруче, чем просто вывод фразHello, world! и Test! на экран.

^ Изучаем Контроллер Welcome

Комментарии: 9  Просмотры: 15 380

Одной из замечательных особенностей концепции MVC является четкое разделение логики и представления. Как вы знаете, MVC расшифровывается как Модель-Вид-Контроллер. Контроллер — это прослойка между моделью и видом, в то время как Вид — это вывод какой-то информации пользователю. Контроллер является классом со своими методами, а Вид — это смесь html-кода с php-кодом. Хорошим тоном считается использовать Виды только для вывода данных и не использовать для какой-то логики.

Давайте откроем наш знакомый Контроллер Welcome, объявленный по умолчанию и рассмотрим его подробно.

defined('SYSPATH') or die('No direct script access.');

 

class Controller_Welcome extends Controller {

 

public function action_index()

{

$this->response->body('hello, world!');

}

}

Первая строчка — защита от прямого доступа к Контроллеру. Об этом я уже упоминал в одном из уроков. Если кто-то попробует напрямую обратится к этому файлу, то получит сообщение, что No direct script access, так как константаSYSPATH у нас объявлена в index.php, следовательно будет неопределена при прямом обращении. В следующей строчке идет объявление класса Controller_Welcome, который расширяет класс Controller, т.е. наследует все свойства и методы родительского класса.

При создании контроллера нужно придерживаться следующих правил:

  • Файл должен находится в папке classes/controller/, которая в свою очередь обычно находится в папках application илиmodules

  • Название файла должно быть в нижнем регистре и заканчиваться .php

  • Поскольку файл находится в папке controller, у названия класса должен быть префикс Controller_. Все подчеркивания подвергаются преобразованию в разделители, поэтому, например класс Controller_User_Profile должен находится по следующему пути classes/controller/user/profile.php. Все слова в названии должны начинаться с большой буквы.

  • Класс должен расширять другой класс. Обычно это базовый класс Controller, но это может быть и какой-то наш класс, который уже, в свою очередь, расширяет класс Коханы.

Как мы видим, контроллер welcome удовлетворяет этим требованиям. Он находится в папке classes/controller/, называется welcome.php. Сам класс имеет название Controller_Welcome и, наконец, он расширяет класс Controller.

Следующая строка — это public function action_index(). В ней происходит создание так называемого действия (action) под названием index. Контроллер, как и любой другой класс, может содержать приватные, защищенные или общедоступные (private, protected или public) свойства и методы, а также наследовать классы и методы родительского класса и перезаписывать их.

Любой public-метод в классе контроллера, который имеет префикс action_ считается таким методом, который напрямую можно вызывать через адресную строку. Если вы помните, в уроке Первые шаги мы создавали новый метод action_test, который выводил слово test! при обращении по адресу http://kohana/welcome/test. Это как раз то, о чем я только что говорил. А назывался бы метод просто test, ничего бы не вышло и мы получили бы сообщение об ошибке. Мы обязательно рассмотрим роутинг более подробно, так как это очень важная тема. Но я думаю вы уже поняли, как формируются адреса в Кохане. Схематично это можно представить так http://kohana/controller/action, т.е. после первого разделителя идет название контроллера, потом идет название action-а (при его отсутствии берется action по умолчанию, прописанный в bootstrap.php). Немного забегая вперед скажу, что дальше могут быть еще разделители. В таком случае это уже идет передача каких-то параметров внутрь метода (action-а).

Ну и наконец, последняя строка в контроллере $this->response->body(‘hello, world!’); производит вывод надписи hello, world! в окно браузера. На самом деле осуществлять вывод таким образом несколько некорректно. Весь вывод данных в браузер должен производится в Видах. Об этом мы и поговорим в следующем уроке.

^ Работаем с Видом — Часть 1

Комментарии: 22  Просмотры: 14 190

На данный момент все, что делает наш сайт — это выводит фразу Hello, world ! (ну или другую фразу, если вы что-то поправляли в action-методе), причем выводит сразу из Контроллера минуя Вид. Но так никто и никогда не делает. Приложение строится на их взаимодействии, причем из Контроллера в Вид можно передавать какие-то данные. Давайте «научим» наш пока единственный Контроллер welcome работать с файлом Вида, который мы сейчас создадим.

Для этого откройте файл контроллера /application/classes/controller/welcome.php и измените его метод следующим образом:

public function action_index()

{

$this->response->body(View::factory('welcome'));

}

В Кохане файлы Видов находятся в папке /application/views/, где можно также организовывать подпапки для удобства. Еще файлы видов могут лежать в папке /modules/название модуля/views/, в том случае, если вид используется в модуле. Поскольку ни о каких модулях пока речи не идет, то создаем файл welcome.php и сохраняем его по следующему пути: /application/views/welcome.php. Внутрь можно засунуть какой-нибудь текст и какие-нибудь html-теги. Ну давайте напишем

^

Привет! Это Вид. Как меня ВидНо ?



А теперь запустите наш проект. Все вывелось ? Отлично.

Как мы видим, у класса View есть статический метод factory. Он на самом деле принимает два параметра. Первый — это название файла Вида. Второй — это массив со значениями, которые будут использоваться в Виде. Метод factory вернет нам новый объект класса View. Который в процессе дальнейшей обработки выведет html-код в браузер, в чем мы только что убедились.

^ Передача данных в Вид. Массив с данными.

Как говорилось ранее, одной из главных особенностей Контроллеров является возможность передавать данные в файлы Вида. Это позволяет нам держать логику в Контроллерах и Моделях, а представление в Видах. Есть несколько вариантов реализации этого. Два мы рассмотрим сейчас, остальные в следующем уроке.

Измените метод action_index в Контроллере следующим образом:

public function action_index()

{

$data = array(

'name' => 'Васька',

'age' => 25

);

$this->response->body(View::factory('welcome', $data));

}

а в Виде поменяйте текст на такой:

Привет!

Меня зовут, echo $name; ?>. Мне echo $age; ?> лет.

В виде я всегда использую echo для вывода, но вы можете использовать сокращенную форму записи ‘=’.

Запустите. Должно вывестись крупным шрифтом ^ Привет! и ниже Меня зовут, Васька. Мне 25 лет.. После передачи массива в качестве второго параметра произошла его обработка таким образом, что в Виде его ключи стали названиями переменных. Все очень просто, но не всегда удобно. К счастью этот способ — не единственный.

^ Создание переменных экземпляра класса View.

Рассмотрим еще один способ. Измените код следующим образом:

public function action_index()

{

$view = View::factory('welcome');

$view->name = 'Васька';

$view->age = 25;

$this->response->body($view);

}

Сохраните, запустите. Не поменялось совершенно ничего, вывод такой же. Но в этот раз мы уже не создаем массив с парами ключ — значение, а используем метод factory, чтобы работать с экземпляром Вида и создаем новые значения (для этого в классе View используется магический метод __set).

^ Работаем с видом — Часть 2

Комментарии: 20  Просмотры: 11 484

Использование метода set()

Следующий способ передачи данных в Вид, который мы рассмотрим, будет использование метода set, который есть у класса View. Он принимает два значения, причем первым будет имя, а вторым — значение переменной в файле Вида. Поменяйте метод action_index:

public function action_index()

{

$view = View::factory('welcome')

->set('name', 'Васька')

->set('age', 25);

$this->response->body($view);

}

Сохраните и обновите свою страничку. Использование метода set делает код более читабельным, так как все находится в одном месте.

^ Использование метода bind()

С помощью этого метода можно легко создавать переменные, которые нам потребуются в Виде уже при создании экземпляра объекта, причем значения им сразу присваивать не обязательно. Измените код следующим образом:

public function action_index()

{

$view = View::factory('welcome')

->bind('name', $name)

->bind('age', $age);

$name = 'Васька';

$age = 25;

$this->response->body($view);

}

Запустите. Ничего не поменялось. А теперь уберите строчку $name = ‘Васька’; и запустите снова. И хотя имя уже не выведется, но и сообщения об ошибке мы не получим. Чего нельзя сказать о первых трех способах. Возможно где-то его будет удобнее использовать, чем метод set с последующей проверкой переменной на существование (PHP-функцияisset).

Иногда для удобства можно использовать сразу несколько способов передачи данных:

public function action_index()

{

$view = View::factory('welcome')

->bind('age', $age);

$age = 'больше 18';

$view->name = 'Васька';

$this->response->body($view);

}

А теперь добавим в Вид тернарный оператор, как дополнительную проверку:

Привет!

Меня зовут, echo isset($name)? $name : 'Гость'; ?>.

Мне echo $age; ?> лет.

и удалим в Контроллере строчку $view->name = ‘Васька’;. Запускайте. Вы получите не ошибку, а Гостя. Кстати это практически готовый скрипт для залогиненого/незалогиненого пользователя :)

На этом пока все. В следующем уроке мы рассмотрим Контроллер шаблонов Template Controller, который позволяет более удобно с ними работать.

^ Контроллер Шаблонов

Комментарии: 28  Просмотры: 14 339

Фреймворк Кохана идет сразу с со специальным контроллером шаблонов (Template Controller), который позволяет намного проще работать с файлами шаблонов и делает код в Контроллере, где идет работа с шаблонами, гораздо компактнее. Предлагаю разобрать все это на примерах. Откройте наш старый знакомый Контроллер Welcome и измените код на следующий:

class Controller_Welcome extends Controller_Template {

 

public function action_index()

{

$content = View::factory('welcome')

->bind('age', $age);

$age = 'больше 18';

$content->name = 'Васька';

$this->template->content = $content;

}

 

} // End Welcome

В папке с Видами создайте еще один файл с названием template.php и напишите в нем следующее:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">







Работаем с Контроллером Шаблонов



 



echo $content; ?>





Теперь можно обновить нашу страницу. Визуально ничего не поменялось (разве что у страницы появился title — Работаем с Контроллером Шаблонов). Но если посмотреть html-код страницы, видно, что внутри template.php, между тегами body, вывелся шаблон welcome.php.

Что мы поменяли? Прежде всего изменилось наследование в классе Controller_Welcome. Теперь наследуется неController, а Controller_Template. Если заглянуть в файл /system/classes/kohana/controller/template.php с классомController_Template, видно, что он в свою очередь наследует уже знакомый нам класс Controller. Также видно, что шаблоном по умолчанию там назначен template (поэтому мы и назвали наш файл template.php):

/**

* @var View page template

*/

public $template = 'template';

Если мы хотим назвать базовый шаблон по другому, например main.php, то в Контроллере Welcome в самом верху нужно прописать его как базовый шаблон, т.е. просто

public $template = 'main';

и теперь можно смело переименовывать файл.

Что все это нам дает ? Возможность очень удобно передавать данные как в базовый шаблон, так и в другие шаблоны. Например так:

class Controller_Welcome extends Controller_Template {

 

// Определяем шаблон по умолчанию

public $template = 'main';

 

public function action_index()

{

$content = View::factory('welcome');

 

// Передаем данные в шаблон welcome.php

$content->age = 'больше 18';

$content->name = 'Васька';

 

// Передаем данные в шаблон по умолчанию - main.php

$this->template->title = 'Работаем с Контроллером Шаблонов';

$this->template->description = 'Учимся передавать данные в шаблоны';

$this->template->content = $content;

}

 

} // End Welcome

и в файле шаблона main.php тоже немножко поменяем:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">







<b><?php</b> echo $title; <b>?></b>





 



echo $content; ?>





Удобно ? По-моему вполне. А если вдруг нужно, чтобы какие-то переменные было видно во всех файлах Вида, можно использовать Глобальные переменные Вида. Их мы и рассмотрим в следующем уроке.

^ Глобальные переменные Вида

Комментарии: 18  Просмотры: 10 541

В предыдущем уроке мы с вами рассмотрели передачу данных в шаблоны. В частности, передачу данных во внутренний шаблон welcome.php и в основной шаблон main.php. Но те переменные, которые мы передавали в первый шаблон, не были доступны во втором и наоборот. Что же делать, если нужно, чтобы какие-то переменные были доступны во всех файлах Вида. Можно конечно каждый раз передавать эти переменные, но гораздо проще объявить их глобальными переменными Вида. Делается это с помощью статического метода set_global класса View.

Изменим наш код:

class Controller_Welcome extends Controller_Template {

 

// Определяем шаблон по умолчанию

public $template = 'main';

 

public function action_index()

{

// Создаем глобальные переменные Вида

View::set_global('title', 'Работаем с Контроллером Шаблонов');

View::set_global('description', 'Учимся передавать данные в шаблоны');

 

$content = View::factory('welcome');

 

// Передаем данные в шаблон welcome.php

$content->age = 'больше 18';

$content->name = 'Васька';

 

// Выводим основной шаблон

$this->template->content = $content;

}

 

} // End Welcome

Сохраните и запустите. Как видите, несмотря на то, что мы не передавали в основной шаблон никаких данных (только контент), но title и description все равно вывелись. Данные глобальные переменные теперь доступны из любого файла Вида. Иногда это бывает полезно.

^ Использование метода bind_global

В одном из предыдущих уроков, где мы работали с передачей данных в Вид, рассказывалось о методе bind. Он позволял нам как бы заранее объявить (говорят еще — забиндить) переменные и таким образом избежать возможных ошибок с необъявленными переменными. Точно также можно поступать и с глобальными переменными.

Снова изменим код:

class Controller_Welcome extends Controller_Template {

 

// Определяем шаблон по умолчанию

public $template = 'main';

 

public function action_index()

{

// Биндим глобальную переменную Вида

View::bind_global('title', $title);

// Присваиваем значение забинденой переменной

$title = 'Работаем с Контроллером Шаблонов';

// Создаем глобальную переменные Вида

View::set_global('description', 'Учимся передавать данные в шаблоны');

 

$content = View::factory('welcome');

 

// Передаем данные в шаблон welcome.php

$content->age = 'больше 18';

$content->name = 'Васька';

 

// Выводим основной шаблон

$this->template->content = $content;

}

 

} // End Welcome

Обновите страницу. Ничего не поменялось. А теперь удалите или закомментируйте строку $title = ‘Работаем с Контроллером Шаблонов’;. Хоть нам и не выведет теперь title сайта, но как и раньше, ошибку мы не получим.

На этом урок с глобальными переменными окончен. До встречи в следующем уроке.

^ Создаем свой Контроллер

Комментарии: 24  Просмотры: 10 134

Пришла пора нам уйти от использования Контроллера, который шел в качестве образца в Кохане — КонтроллераWelcome. Давайте попробуем сделать наш первый «собственный» Контроллер. Создайте внутриapplication/classes/controller/ файл с названием page.php и вставьте следующий код:

defined('SYSPATH') or die('No direct script access.');

 

class Controller_Page extends Controller_Template {

 

// Определяем шаблон по умолчанию

public $template = 'main';

 

public function action_about()

{

$content = View::factory('/pages/about');

$this->template->title = 'О сайте';

$this->template->description = 'Страница о сайте';

$this->template->content = $content;

}

 

} // End Page

Думаю тут все понятно. Поскольку файл Контроллера имеет название page.php и находится в папке Controller, то сам класс будет называться Controller_Page. Наследовать мы будем Controller_Template. Так как наш главный шаблон имеет название не template.php, а main.php, то мы сразу прописываем это. Далее мы создаем метод, но обратите внимание, что не action_index, а action_about. В методе задаем шаблон контента, а также заголовок и описание основного шаблона.

Теперь нужно создать папку pages (думаю понятно почему) и поместить туда шаблон about.php. В нем будет следующий текст:

Здесь будет информация о сайте

Шаблон main.php оставьте без изменений. А теперь напишите в браузере http://kohana/page/about. Вы получите страницу с текстом «Здесь будет информация о сайте», а также нами прописанные title и description (это видно, если посмотреть html-код страницы). Думаю вы поняли, что произошло. Поскольку метод в классе имеет префикс action_, то мы смогли обратиться к нему через уже знакомую нам схему http://адрес сайта/контроллер/метод.

Для закрепления создайте еще один метод в этом же классе:

public function action_contacts()

{

$content = View::factory('/pages/contacts');

$this->template->title = 'Мои контакты';

$this->template->description = 'Страница для связи со мной';

$this->template->content = $content;

}

Теперь создайте еще один шаблон, как вы думаю догадались, с названием contacts.php и текстом:

Здесь будут мои контакты

и поместите его рядышком с шаблоном about.php. Запускаем http://kohana/page/contacts, получаем страницу контактов. Все элементарно и просто. Но немного смущает повторяемость некоторых участков кода. Например, при создании нового Контроллера нам прийдется опять же прописать для него базовый шаблон. А если таких Контроллеров много ? И если мы потом захотим переименовать базовый шаблон, нам прийдется прыгать по всем Контроллерам и исправлять ? На самом деле нет. Для этого создается Базовый Контроллер, в который помещается код, одинаковый для всех страниц, которые его используют. Но об этом уже в следующем уроке.

^ Создаем Базовый Контроллер

Комментарии: 11  Просмотры: 9 167

На прошлом уроке мы с вами создали «собственный» Контроллер Controller_Page и теперь у нас уже два Контроллера:Controller_Page и Controller_Welcome. С дальнейшим ростом приложения появляются другие Контроллеры и все они обычно имеют какую-то общую информацию. Это могут быть заголовки, описания и другие данные, которые необходимо прописывать в каждом Контроллере. Такие общие элементы обычно выносят в отдельный Контроллер, который является промежуточным между Контроллером шаблонов и нашими Контроллерами, т.е. он наследует Контроллер шаблонов, а другие Контроллеры в свою очередь наследуют его. По сути дела Контроллер шаблонов тоже является промежуточным, но уже между Контроллером Коханы и нашими Контроллерами и тоже применяется для каких-то общих действий (работы с шаблонами), т.е. облегчает нам разработку. Но давайте еще больше ее облегчим и создадим свой базовый Контроллер. Наших знаний на данный момент уже вполне достаточно, чтобы это реализовать.

Создайте в папке /application/classes/controller/ файл common.php и напишите в нем следующий код:

defined('SYSPATH') or die('No direct script access.');

 

abstract class Controller_Common extends Controller_Template {

 

public $template = 'main';

 

public function before()

{

parent::before();

View::set_global('title', 'Мой сайт');

View::set_global('description', 'Самый лучший сайт');

$this->template->content = '';

$this->template->styles = '';

$this->template->scripts = '';

}

 

} // End Common

Сразу поясню, что мы здесь понаписали. Сначала мы объявили класс как Абстрактный, так как напрямую мы работать с ним не будем и создан он только для того, чтобы наследоваться другими классами. Далее объявили основной шаблон по умолчанию — это нам уже знакомо. Теперь самое интересное — специальный метод before(). Этот метод не нужно вызывать. Он запускается автоматически самым первым при обращении к классу, в котором он прописан или к классам, которые наследуют этот класс. Следующая строка parent::before(); необходима, чтобы метод before() класса-родителяController_Template не перетирался (а он там есть, будьте уверены, как есть он и в классе Controller). Ну и далее вам тоже все должно быть знакомо. Объявляем глобальные переменные Вида $title и $description, и три переменных для шаблона в качестве заготовок: контент, стили и скрипты. Ими мы займемся в следующем уроке. Думаю с этим все понятно.

Теперь займемся нашим Контроллером из файла page.php:

defined('SYSPATH') or die('No direct script access.');

 

class Controller_Page extends Controller_Common {

 

public function action_about()

{

$content = View::factory('/pages/about');

$this->template->title = 'О сайте';

$this->template->description = 'Страница о сайте';

$this->template->content = $content;

}

 

public function action_contacts()

{

$content = View::factory('/pages/contacts');

$this->template->title = 'Мои контакты';

$this->template->description = 'Страница для связи со мной';

$this->template->content = $content;

}

 

} // End Page

Обратите внимание. Теперь мы наследуем не Controller_Template, а Controller_Common. Это первое изменение. И второе — мы убрали строку с объявлением базового шаблона. Теперь опробуйте ссылки http://kohana/page/about иhttp://kohana/page/contacts. Ничего как бы не поменялось. Но мы убрали определение базового шаблона, а ошибку нам не выдало. Это произошло потому, что это определение теперь берется из наследуемого класса Controller_Common. И чтобы вы в этом полностью убедились, сначала посмотрите какие title и description имеет страница сейчас, после чего приведите код в page.php к такому виду:

defined('SYSPATH') or die('No direct script access.');

 

class Controller_Page extends Controller_Common {

 

public function action_about()

{

$content = View::factory('/pages/about');

$this->template->content = $content;

}

 

public function action_contacts()

{

$content = View::factory('/pages/contacts');

$this->template->content = $content;

}

 

} // End Page

Обновите страницу и снова посмотрите на title и description. Вы увидите в них тот текст, что прописан в базовом Контроллере. Это бывает полезно, когда нужно определить какой-то общий title и общий description для всего сайта, а для некоторых страниц уже менять его индивидуально в Контроллерах. Ну и конечно же нам теперь не нужно прописывать базовый шаблон в каждом Контроллере.
В следующем уроке мы подключим к шаблону CSS и вообще сделаем эдакую простейшую заготовку для блога.

А пока домашнее задание вам будет — аналогично Controller_Page переработать Controller_Welcome.

Схожі:

Что же такое Kohana ? iconЧто такое качество
Роберт Хойер, Брук Хойер Что такое качество?//Стандарты и качество. 2002. N3 с. 97-102
Что же такое Kohana ? iconО духе законов
Если бы среди бесконечного разнообразия предметов, о которых говорится в этой книге, и оказалось что-нибудь такое, что против моего...
Что же такое Kohana ? iconЛекция Общие положения 1 Введение 1 2 Попытка ответить на вопрос «Что же такое Корпоративная Информационная Система?»
Попытка ответить на вопрос «Что же такое Корпоративная Информационная Система?» 2
Что же такое Kohana ? iconЧто такое деньги?
Отличительной чертой товарных денег является то, что их ценность как денег и ценность как товаров одинаковы
Что же такое Kohana ? icon43 Сократ. Что это ты пришел в такое время, Критон? Или уже не так рано?
Критон. Он ко мне уже привык, Сократ, потому что я часто сюда хожу; к тому же я отчасти и ублаготворил его
Что же такое Kohana ? iconДокументи
1. /Что такое Windows XP.doc
Что же такое Kohana ? iconДокументи
1. /Что такое Windows XP.doc
Что же такое Kohana ? iconДокументи
1. /Что такое Windows XP.doc
Что же такое Kohana ? iconДокументи
1. /Nbvjirj Что такое когнитивная психология.doc
Что же такое Kohana ? iconДокументи
1. /Nbvjirj Что такое когнитивная психология.doc
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи