Modular Extensions - HMVC 5

Каждый топик здесь посвящен конкретной библиотеке или наработкам конкретного проекта

Re: Modular Extensions - HMVC 5

Сообщение Tovit » 05 июл 2009, 20:13

mixar писал(а):
Tovit писал(а):В главном роутинге:
Код: Выделить всё
$route['(.+)'] = 'welcome/$1'; 

Правильно ли я понимаю что это правило надо вставить в apllication/config/route.php после $route['default_controller'].

Да
mixar писал(а): Теперь при переходе по ссылке site.local/news/ пишет 404 Page Not Found. Хотя site.local/main/ пашет...

Вам нужно или метод news создать в main или обрабатывать _remap в main.

mixar писал(а):
Tovit писал(а):А дальше -- анализируете uri через _remap($first_segment).

Анализировать надо в модулях или в контроллере main? Вроде вы писали что роутинг в контроллерах модулей не работает...

Анализировать нужно в главном контроллере main, через метод _remap. При таком роутинге -- модуля сами вызываться не будут.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Modular Extensions - HMVC 5

Сообщение enshteyns » 22 июл 2009, 14:45

Здравствуйте! У меня в файле MX_Controller есть 3 объекта:
  • Base, который наследуется от Controller
  • Frontend, наследующийся от Base
  • Backend, наследующийся от Base
Есть модуль auth, а в нем либа Auth_lib. Мне необходимо загрузить эту либу в конструктор объекта Base.

Делал таким образом:

Код: Выделить всё
public function Base() {
        
        
parent::Controller();
        
        
$this->_autoload_mods();
    }
    
    
// --------------------------------------------------------------------
    
    /**
     * Автозагрузка библиотек модулей
     *
     * @access    private
     * @return    void
     **/
    
    
private function _autoload_mods() {
        
        
$list = array(
            
'auth' => 'Auth_lib'
        
);

        foreach (
$list as $key => $value) {
            
$this->load->library($key '/' $value);
        }
    } 


Но при таком использовании у меня методы фронтэнда и бакэнда (Не базового, т.е. Base) смешиваются. А сама задумка фронтэнда и бакэнда для того и задумана, чтобы отделить управление сайтом от самого сайта.

Как еще можно сделать глобальную автозагрузку библиотек модуля?
enshteyns
 
Сообщения: 8
Зарегистрирован: 13 ноя 2008, 19:00

Re: Modular Extensions - HMVC 5

Сообщение Disney » 09 сен 2009, 16:23

Здраствуйте,

уже несколько дней бъемся, и не можем понять почему

при вызове - ... /welcome
Код: Выделить всё
$this->blog->add(); 

происходит ошибка
Fatal error: Call to a member function on a non-object in /application/modules/welcome/controllers/welcome.php on line 14

(а при вызове ... /blog и ... /blog/add все нормально)

Установили версию 1.7.1 Codeigniter
и PHP Version 4.4.9
и ME 4.2
и HMVC ME 4.3: 4305.zip

создано два модуля blog и welcome

код:
Код: Выделить всё
class Welcome extends Controller {
    function Welcome()
    {
        parent::Controller();    
    
}
    function index()
    {
        $this->load->module('blog');                
        $this
->blog->add();                             /// 14 строка  - ошибка здесь
    }
}
 


Код: Выделить всё
<?php
class Blog extends Controller 
{

    function Blog()
    {
        parent::Controller();
    }

    function index()
    {
        echo 'hello index';
    }

    function add()
    {
        echo 'add blog';
        
    
}



}
 
Disney
 
Сообщения: 3
Зарегистрирован: 08 сен 2009, 15:27

Re: Modular Extensions - HMVC 5

Сообщение oleg4444 » 13 ноя 2009, 08:41

только начал разбираться с HMVC. Наведите пример того, как должны создаваться модели.
oleg4444
 
Сообщения: 4
Зарегистрирован: 09 ноя 2009, 17:44

Re: Modular Extensions - HMVC 5

Сообщение Tovit » 13 ноя 2009, 11:58

...и на форуме первый день... и просмотреть тему некогда...

topic254-60.html#p6003
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Modular Extensions - HMVC 5

Сообщение oleg4444 » 14 ноя 2009, 02:37

Спасибо, конечно. Но в примере моделей нет. На форуме недавно, но не первый день, перед тем как писать изучил тему и ответа не нашел. ;)
oleg4444
 
Сообщения: 4
Зарегистрирован: 09 ноя 2009, 17:44

Re: Modular Extensions - HMVC 5

Сообщение will » 16 ноя 2009, 09:02

Сделал все как написано, создал такую структуру
-modules
--blog
---controllers
-----blog.php
---models
-----blog_model.php
---views
но не хотят подгружаться модели в контроллерах.
в контроллере подгружаю модель таким образом
Код: Выделить всё
function __construct(){
        parent::Controller();
        $this->load->model('Blog_model');
        } 

сама модель
Код: Выделить всё
Class Blog_model extends Model{

    function Model() {
        parent::Model();
    }

    function getAllEntries (){
        $this->load->database();
        $query = $this->db->get('entries');
        return $query->result();   
    
}
}
 
will
 
Сообщения: 6
Зарегистрирован: 16 ноя 2009, 08:28

Re: Modular Extensions - HMVC 5

Сообщение Tovit » 16 ноя 2009, 13:09

1) нижний регистр в именах
2) все методы загрузки при использовании HMVC следует использовать без load. т.е. $this->model('model'); при этом, возвращается указатель на модель. Load -- это базовый класс фреймверка, он ищет в стандартных папках, без учета модульной структуры.

P.S. Посмотрите заголовки методов у HMVC -- становиться многое понятно.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Modular Extensions - HMVC 5

Сообщение will » 16 ноя 2009, 14:43

Записываю без load. $this->model('blog_model'); в конструкторе класса Blog, ругается
Код: Выделить всё
Fatal errorCall to undefined method Blog::model() 
will
 
Сообщения: 6
Зарегистрирован: 16 ноя 2009, 08:28

Re: Modular Extensions - HMVC 5

Сообщение will » 16 ноя 2009, 14:44

файлы HMVC лежат в директории application/libraries
will
 
Сообщения: 6
Зарегистрирован: 16 ноя 2009, 08:28

Re: Modular Extensions - HMVC 5

Сообщение Tovit » 16 ноя 2009, 17:57

Код: Выделить всё
Class Blog_model extends Model{

    function 
Blog_model() {
        
parent::Model();
    }
...
}
 
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Modular Extensions - HMVC 5

Сообщение will » 17 ноя 2009, 12:27

извините конечно за тупые вопросы). исправил
Код: Выделить всё
function __construct() {
        parent::Model();
    } 
смена регистра не помогает, делаю так, но все равно ругается что метода model не существует
Код: Выделить всё
function __construct(){
        
parent::Controller();
       
$this->model('Blog_model');
        }  
will
 
Сообщения: 6
Зарегистрирован: 16 ноя 2009, 08:28

Re: Modular Extensions - HMVC 5

Сообщение Tovit » 17 ноя 2009, 13:45

Вообще, я бы посоветовал все названия классов и файлов записать в нижнем регистре и избавиться от разделителей.
Например, я называю модели по принципу функциональноеимяmd -- отлично помогает.

Если не помогает -- выложите сюда архив с минимальным проектом, где у Вас не загружается что-то.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Modular Extensions - HMVC 5

Сообщение will » 17 ноя 2009, 14:57

сделал как вы говорите, переименовал blog_model в blogmd все заработало.
will
 
Сообщения: 6
Зарегистрирован: 16 ноя 2009, 08:28

Re: Modular Extensions - HMVC 5

Сообщение One2z » 24 ноя 2009, 16:07

wd19 писал(а):сложил все в папку modules/auth, включая конфиг и либы, в DX_auth.php заменяем:
Код: Выделить всё
$this->ci =& get_instance(); 

на
Код: Выделить всё
$this->ci = Modules::load('auth'); 

вот и вся заморока


Сделал все как у тебя, но выдается ошибка
Unable to locate the file: login_form.php in auth/views/
хотя вроде все правильно должно быть.
П.С. Вызываю просто метод $this->auth->login(); из дефолтного контроллера welcome
П.П.С. Так и не понял каким образом работает вся эта система. Ну, как временное решение бросил шаблоны из application/modules/auth/views/auth в application/modules/auth/views.
One2z
 
Сообщения: 11
Зарегистрирован: 02 мар 2009, 00:34

Re: Modular Extensions - HMVC 5

Сообщение franzose » 07 фев 2010, 07:58

Всем привет! Только начал изучать HMVC, честно пролистал эту тему, но все-таки есть проблемка. Скачал, значит, последнюю доступную версию 5.2.31, положил необходимые файлы в папку application/libraries.

В папке application/controllers лежит файл index.php без какого-либо ценного содержания:
Код: Выделить всё
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Index extends MX_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {        
    
}
}

/* End of file index.php */
/* Location: ./system/application/controllers/index.php */
 


Как я понял, контроллеры, которые расширяют базовый функционал, в HMVC должны иметь префикс MX_, а не MY_. Соответственно, в папку application/libraries положил файл MX_Controller.php, расширяющий обычный контроллер. Его содержимое не имеет значения, потому что возникает следующая ошибка:
Fatal error: Call to undefined method CI_Router::fetch_module() in Z:\home\minimal\www\system\application\libraries\Controller.php on line 86


Строка 86:
Код: Выделить всё

$this
->_module = CI::$APP->router->fetch_module();
 


Этого метода действительно нет в стандартном роутере CodeIgniter. Получается, что метод из класса MY_Router поставки HMVC не задействуется...
Как быть? Куда копать? Пробовал в гугле найти ответ — тщетно...
franzose
 
Сообщения: 4
Зарегистрирован: 07 фев 2010, 07:34

Re: Modular Extensions - HMVC 5

Сообщение franzose » 09 фев 2010, 12:42

Прошу меня извинить) Дело было во мне. Ну, если быть точным, то я изменил в конфигах префикс для подклассов, а в поставке класс MY_Router был как раз со стандартным префиксом, отсюда и возникала проблема. Теперь все разрешилось. Надо быть внимательнее.
franzose
 
Сообщения: 4
Зарегистрирован: 07 фев 2010, 07:34

Re: Modular Extensions - HMVC 5

Сообщение bvn » 05 мар 2010, 16:42

Возникла ошибка. Тему прочитал от начала до конца, и даже кажется была похожая ошибка описана, и даже решение со ссылкой на буржуйский форум, вот только, простите меня, я все равно ничего не понял... где там на 89 строке чего закоментировать надо? Я такого не нашел, поэтому описываю проблему тут опять.

Пользуюсь библиотекой View от Alexander Makarov, ну и ситуация слеудующая, в контроллере, который находится в модуле, я меняю стандартный вызов $this->load->view('viewfile'); на вызов библиотеки $this->view->render('viewfile') и... получаю сообщение о невозможности найти файл viewfile.php, который тоже лежит в этом же модуле в каталоге views, как положено.
Немного ковырял дебагером и установил такую причину. Когда вызов $this->load->view() происходит внутри контроллера, то все хокей - вызывается местный лоадер MX_Loader, а когда он происходит внутри библиотеки, а он там происходит, в методе fetch(), то каким-то чудесным образом с помощью get_instance() воскрешается старый стандартный лоадер CI_Loader, который естестыенно ничего не знает, о том, как ему грузить viewfile.php из views, который в модуле.

Вобщем, я пошел дебажить дальше и буду очень благодарен, если мне кто-нибудь поможет решить эту проблему. Благодарю за внимание.
Мой блог: junkabyss.com
Аватара пользователя
bvn
 
Сообщения: 181
Зарегистрирован: 30 авг 2009, 22:39
Откуда: Полтава, Украина

Re: Modular Extensions - HMVC 5

Сообщение Tovit » 06 мар 2010, 11:42

Дебажить Вы будете до бесконечности пока не поймете патерн singleton и то, как его модифицирует HMVC.

Не стандартный View просто ничего не знает о Вашей модульной архитектуре.

Код: Выделить всё
/**
      * Fetch template and return it.
      *
      * @param String $template
      */
     
function fetch($template){
         
/* @var CI CI_Base */
         
$CI = &get_instance(); // <--- заменить на $CI = CI::$APP; получим более "правильный" указатель на приложение
 
         
$content $CI->load->view($template$this->varstrue); // <- $CI->view($template, $this->vars, true); // используем метод view предоставляемый HMVC, он учитывает модульность
 


P.S. я давно использую собственную сборку (сильно перелапаченый базовый HMVC), потому не могу гарантировать результат, но смысл именно такой -- обычному CI не известно Какой модуль используется сейчас, об этом знает только Router::$path которую использует HMVC.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Modular Extensions - HMVC 5

Сообщение bvn » 06 мар 2010, 14:32

Не до бесконечности дебажить не стал, ушел на Matchbox...
Мой блог: junkabyss.com
Аватара пользователя
bvn
 
Сообщения: 181
Зарегистрирован: 30 авг 2009, 22:39
Откуда: Полтава, Украина

Пред.След.

Вернуться в Решения, авторский код и библиотеки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0