Как реализовать HMVC с использованием каскадной файловой системы Kohana - PullRequest
1 голос
/ 12 ноября 2011

Kohana 3.2 был разработан для поддержки шаблона проектирования HMVC.Шаблон HMVC состоит из вложенных MVC-триад.Тем не менее, насколько я могу судить, каскадная файловая система Kohana требует, чтобы все модели и контроллеры были размещены в верхнем каталоге 'classes', а Views - в верхнем каталоге 'views'.Таким образом, если модель / контроллеры отделены от представлений на верхнем уровне файловой системы, то как мы должны реализовывать вложенные MVC-триады?

enter image description here

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Тем не менее, насколько я могу судить, каскадная файловая система Kohana требует, чтобы все модели и контроллеры были размещены в верхнем каталоге 'classes', а Views - в верхнем каталоге 'views'.

То, что вам нужно, - это структура папок, такая как Kohana 2, codeigniter и, скорее всего, другие фреймворки, в которых есть выделенные папки для контроллеров, моделей и представлений.Kohana 3 имеет специальную папку для занятий.Способ сборки Kohana 3 требует, чтобы контроллеры имели префикс Controller_.Автозагрузчик Kohana 3 будет искать классы с префиксом Controller_ в папке classes / controller.

Затем Kohana 3 также поставляется с очень простыми классами Model и View.Насколько мне известно, ядро ​​Kohana 3 не использует класс Model, а лишь несколько раз использует класс View.Но соглашение о предоставлении моделям префикса Model_ можно найти в Model :: factory (), однако оно не применяется.Вам не нужно их использовать.

Класс View ищет шаблоны в папке de views.(Не рекомендуется от Zombor) View_Module от Zombor (один из разработчиков) также бывает интересно посмотреть там.Модуль (отредактированный Zombor) KOstache , также Zombor, ищет свои шаблоны в папке с шаблонами.Оба модуля позволяют вам создавать классы View-Model, для которых соглашение должно иметь префикс View_, чтобы они оказались в классах / представлении.Но ничто не мешает вам создать класс View_, который расширяет View для каждого шаблона, который вы помещаете в папку представлений, и жестко прописывает путь для этой View-Model.

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

2 голосов
/ 13 ноября 2011

Не уверен, если вы захотите взломать способ обработки представлений, но вы можете расширить класс Kohana_View, чтобы функция set_filename() принимала любой каталог, который вы хотите.

Если вам нужна функция автозагрузки, аналогичная контроллерам / моделям, вы можете реализовать ее самостоятельно.

Например (не проверено):

public function set_filename($view)
{        
    // Transform the class name into a path
    $file = str_replace('_', '/', strtolower($view));

    if ($path = Kohana::find_file('classes', $file))
    {
        // Store the file path locally
        $this->_file = $path;

        return $this;
    }  

    throw new View_Exception('The requested view :view could not be found', array(
        ':view' => $view,
    ));
}
...