Знакомство С Kohana 3.0 — Часть 5

Встречайте пятую часть серии статей о разработке с помощью Kohana PHP V3 (KO3).

Предыдущие части можно найти по ярлыку " введение в кохану 3.0 «.

В этой части мы рассмотрим HMVC (Hierarchical-Model-View-Controller).

HMVC — это расширение MVC (Модель-Представление-Контроллер), позволяющее контроллеру давать определенные инструкции другим контроллерам в иерархическом порядке.

Чтобы понять это, представьте себе модули, которые могут работать самостоятельно или в группах.

Если это не поможет, проверьте с этой иллюстрацией шаблона «Иерархическая модель-представление-контроллер» .

Раньше мы проектировали страницы, за которые отвечал один единственный контроллер с несколькими действиями, которые получали данные от модели и правильно собирали представления в одну полноценную веб-страницу.

HMVC позволяет вам лучше организовать код и сделать его более пригодным для повторного использования.

А благодаря тому, как HMVC реализован в Kohana 3, вы даже можете обращаться к другим серверам за контентом для разделов.

Создадим новый контроллер:

  
  
  
  
  
  
   

<Эphp defined('SYSPATH') or die('No direct script access.'); class Controller_Hmvc extends Controller_DefaultTemplate { public function action_index() { // Set meta data $this->template->title = 'Место 3.0 Тест HMVC'; $this->template->meta_keywords = 'PHP, Kohana, KO3, Framework, HMVC'; $this->template->meta_description = 'A test of of the KO3 framework HMVC pattern'; // Fill in content $ko3 = array(); $ko3['posts'] = Request::factory('posts/getposts')->execute()->response; $this->template->content = View::factory('pages/hmvc', $ko3); } }

Сохраните файл как «hmvc.php» в папке «application/classes/controller».

Приведенный выше код должен выглядеть знакомо, хотя выделяется одна строка:

$ko3['posts'] = Request::factory('posts/getposts')->execute()->response;

Вот здесь и происходит волшебство HMVC. Здесь действие «getposts» вызывается из контроллера «posts», возвращая результат, который мы получаем и сохраняем в массиве, который передается в более позднее представление.

И раз уж мы заговорили о представлениях, давайте создадим его для этого контроллера:

<Эphp echo $posts;?>

Сохраните это как «hmvc.php» в папке «application/views/pages/».

Теперь, собственно, сделаем контроллер «постов»:

<Эphp defined('SYSPATH') or die('No direct script access.'); class Controller_Posts extends Controller { public function action_index() { } public function action_getposts() { // Load model $posts = new Model_Post(); // Fill content array for view with last 10 posts. $content = array(); $content['posts'] = $posts->getLastTenPosts(); // Render and output. $this->request->response = View::factory('pages/hmvc_posts', $content); } }

Сохраните файл как «posts.php» в каталоге «application/classes/controller».

Теперь давайте откроем пустой документ для нового представления:

<Эphp foreach($posts as $post):?> <h1><Эphp echo $post['title'];?></h1> <Эphp echo $post['post'];?> <hr /> <Эphp endforeach;?>

Сохраните это как «hmvc_posts.php» в папке «applications/views/pages».

Если вы сейчас откроете его в браузере» http://localhost/mykohana3/hmvc », на экране должно появиться несколько записей.

Того же результата можно добиться, обратившись к контроллеру непосредственно из представления.

Поскольку мы используем один шаблон, нет необходимости реализовывать HMVC во всех контроллерах, использующих этот шаблон.

Измените файл «hmvc.php» из папки «application/classes/controller» на следующий вид:

<Эphp defined('SYSPATH') or die('No direct script access.'); class Controller_Hmvc extends Controller_DefaultTemplate { public function action_index() { // Set meta data $this->template->title = 'Место 3.0 Тест HMVC'; $this->template->meta_keywords = 'PHP, Kohana, KO3, Framework, HMVC'; $this->template->meta_description = 'A test of of the KO3 framework HMVC pattern'; // Fill in content $ko3 = array(); $ko3['content'] = 'Hello there!'; $this->template->content = View::factory('pages/hmvc', $ko3); } }

Теперь отредактируйте «hmvc.php» из папки «application/views/pages/», чтобы он выглядел следующим образом:

<Эphp echo $content;?><br/> <Эphp echo Request::factory('posts/getposts')->execute()->response;?>

Это довольно простой пример, который можно расширить, чтобы можно было отправлять данные в разных форматах, например: простой html, html, полный html, xml, json и т. д. Теги: #введение в kohana 3.0 #kohana 3 #kohana #framework #hmvc #kohana

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.