Как стать автором
Обновить

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

Время на прочтение 3 мин
Количество просмотров 2.9K
Автор оригинала: http://www.dealtaker.com/blog/2010/02/25/kohana-php-3-0-ko3-tutorial-part-5/
Встречайте пятую часть цикла статей по разработке с Kohana PHP V3 (KO3). Предыдущие части можно найти по метке "знакомство с kohana 3.0". В этой части мы рассмотрим HMVC (Иерархические-Модель-Вид-Контроллер).

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 = 'Kohana 3.0 HMVC Test';
        $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/”.

Теперь, собственно, сделаем контроллер “posts”:

<?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 = 'Kohana 3.0 HMVC Test';
        $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, и так далее.
Теги:
Хабы:
0
Комментарии 4
Комментарии Комментарии 4

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн