Встречайте пятую часть серии статей о разработке с помощью Kohana PHP V3 (KO3).
Предыдущие части можно найти по ярлыку " введение в кохану 3.0 «.
В этой части мы рассмотрим HMVC (Hierarchical-Model-View-Controller).
HMVC — это расширение MVC (Модель-Представление-Контроллер), позволяющее контроллеру давать определенные инструкции другим контроллерам в иерархическом порядке.
Чтобы понять это, представьте себе модули, которые могут работать самостоятельно или в группах.
Если это не поможет, проверьте с этой иллюстрацией шаблона «Иерархическая модель-представление-контроллер» .
Раньше мы проектировали страницы, за которые отвечал один единственный контроллер с несколькими действиями, которые получали данные от модели и правильно собирали представления в одну полноценную веб-страницу.
HMVC позволяет вам лучше организовать код и сделать его более пригодным для повторного использования.
А благодаря тому, как HMVC реализован в Kohana 3, вы даже можете обращаться к другим серверам за контентом для разделов.
Создадим новый контроллер:
Сохраните файл как «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['posts'] = Request::factory('posts/getposts')->execute()->response; $this->template->content = View::factory('pages/hmvc', $ko3); } }
Приведенный выше код должен выглядеть знакомо, хотя выделяется одна строка: $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
-
Почему Falcon 9Ft — Шедевр
19 Oct, 24 -
Веревка Как В «Перережь Веревку»
19 Oct, 24 -
Стив Джобс Выбрал Соавтора Мемуаров
19 Oct, 24 -
Что Делать, Если Наставника Нет?
19 Oct, 24