CodeIgniter и HMVC вопросы - PullRequest
7 голосов
/ 22 июля 2011

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

Q1.Я хочу создать 2 "главных контроллера" для FrontEnd и BackEnd , например:

  • MY_Controller extends CI_Controller
  • FrontEnd расширяет MY_Controller и все контроллеры внешнего интерфейса будут расширяться FrontEnd .
  • BackEnd extends MY_Controller и все бэкэнд-контроллеры будут расширяться BackEnd .

Каков наилучший способ сделать это с HMVC (MX)?

Спасибо @Wesley Murch за идею поместить 3 класса MY_Controller, Frontend, Backend в MY_Controller.php, но я думаю, что поместить каждый класс в один файл php лучше (чище).Или я не прав?Я думал о создании такой структуры:

  • . / Core / MY_Controller.php (расширяет MX_Controller)
  • . / Library / Backend.php (расширяет MY_Controller)
  • . / Library / Frontend.php (расширяет MY_Controller)
  • Автоматическая загрузка Backend и Frontend в autoload.php
  • Все контроллеры внешнего интерфейса будут расширяться Внешний интерфейс (например: class Blog extends Frontend)
  • Все контроллеры внутреннего интерфейса будут расширяться Backend (Например: class Admin extends Backend)

Будет ли это работать без помещения еще одной строки кода в контроллеры backend / frontend в include_once или require_once : . / Library / Backend.php или . / library / Backend.php ?


Q2.Как реализовать несколько тем с HMVC?Например, в MVC мы можем создать 2 темы, подобные этой:

  • . / Application / views / theme1 / view_files.php
  • . / Application/views/theme2/view_files.php

Но в HMVC папки представлений находятся внутри отдельных папок, и если я хочу реализовать несколько тем, обычно я должен сделать это так:

  • . / Application / modules / module1 / views / theme1 / view_files.php
  • . / Application / modules / module1 / views / theme2 / view_files.php
  • . / application / modules / module2 / views / theme1 / view_files.php
  • . / application / modules / module2 / views / theme2 / view_files.php

Это не то, что я хочу, потому чтоЯ хочу поместить файл всех представлений темы только в одну папку, а позже, если я хочу создать новую тему, мне нужно будет дублировать только одну папку темы.Но мне интересно, как я могу сделать это, не нарушая модели HMVC (потому что, насколько я знаю, в модели HMVC, Модели, Представления, Контроллеры должны быть в одной папке модуля - по крайней мере, с CI).Это конфликт, в который я застрять.

1 Ответ

9 голосов
/ 22 июля 2011

Просто откройте или создайте core/MY_Controller.php, создайте класс MY_Controller и пусть он расширяет MX_Controller, затем в том же файле создайте другие базовые контроллеры и сделайте так, чтобы они расширяли MY_Controller.Вот пример, который вы можете скопировать / вставить, чтобы начать:

<?php defined('BASEPATH') OR exit('No direct script access.');

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
    }

}

class Frontend_Controller extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
    }

}

class Backend_Controller extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
        // Check admin login, etc.
    }

}

/* end file application/core/MY_Controller.php */

Что касается "нескольких тем", не уверен, что вам нужно.Stylesheets?HTML-шаблоны?Вам нужно, чтобы пользователи переключали их, или вы будете делать это вручную?Вам нужно обнаружить мобильные устройства и соответственно изменить тему?Все вышеперечисленное?«Лучший» способ будет зависеть от вашей реализации.

Я думаю о создании 2 библиотек, расширяемых из MY_Controller.php, и их автоматической загрузке.Будет ли это работать?

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

О темах я хочу иметь несколько тем для представлений, например: - /views/theme1/view_files.php - /views/theme2/view_files.php О js / css / images я могудоговоритьсяВначале я исправлю тему, но позже я могу позволить пользователю выбрать.С помощью MVC я могу помещать темы в подпапки / views /, как указано выше, но в HMVC я должен найти другой способ упорядочить их по темам, потому что папки просмотра разделены (я хочу, чтобы все файлы представления одной и той же темы были только в 1папка) ..

Поскольку это слишком широкий вопрос для решения, и вы, кажется, еще ничего не пробовали, я дам вам минимум пример:

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
        $this->theme = 'theme1'; // matches your directory name in /views/themes/
    }

}

С вашего контроллера:

$this->load->view('themes/'.$this->theme.'/my_view_file');

Используя HMVC, файл всегда будет искать в текущем модуле, а затем вернуться к каталогам приложений по умолчанию, еслиэто не существуетЕсли по какой-то причине вам нужно быть явным, вы можете сказать, что перед именем пути стоит указывать имя модуля (например, для перекрестной загрузки ресурсов между модулями).Пример:

// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module

В любом случае, это не полное решение, но, надеюсь, оно поможет вам начать с идеей.Есть миллионы способов сделать это, вот две библиотеки шаблонов, которые уже поддерживают темы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...