2012-09-16 1 views
3

У меня есть hmvc setup и работает нормально,файл route.php не загружается при использовании hmvc в codeigniter?

У меня есть модуль галереи.

Модуль галереи распадается на три контроллера и его структура выглядит следующим образом:

/modules/gallery/ 
/modules/gallery/config/ 
/modules/gallery/helpers/ 
/modules/gallery/controllers/ 
/modules/gallery/controllers/gallery.php 
/modules/gallery/controllers/galleries.php 
/modules/gallery/controllers/images.php 
/modules/gallery/models/ 
/modules/gallery/models/galleriesmodel.php 
/modules/gallery/models/imagesmodel.php 
/modules/gallery/views/dashboard.tpl 
/modules/gallery/views/galleries/dashboard.tpl 
/modules/gallery/views/images/dashboard.tpl 

во всяком случае, у меня есть функция внутри моего images.php контроллера называется list_items

Так что я хочу, чтобы отобразить URL
http://example.com/gallery/images/list к
http://example.com/gallery/images/list_items

Так Я думал, сладкий как, Я просто добавлю /modules/gallery/config/routes.php с маршрутом внутри него.

Но, похоже, маршруты не включены.

Маршруты из /application/config/routes.php включены, и если я ставлю die('loaded') в модуле routes.php тем он действительно убивает сценарий,

Но работает

print_r($this->router) от одного из контроллеров не обнаруживается какой-либо из маршрутов из модуля routes.php.

Что здесь происходит?

+0

Не могли бы вы показать нам содержимое/модулей/галерея /config/routes.php? – Philo

+0

'$ route ['gallery/list'] = 'gallery/images/list_items';' '$ route ['gallery/list/(: any)'] = 'gallery/images/list_items/$ 1';' – Hailwood

+0

Вы пытались отладить его с расширением, которое я написал ранее? http://stackoverflow.com/questions/12446184/debugging-routes-in-codeigniter/12446419 – Philo

ответ

1

Насколько я знаю,

HMVC смотрит только для запрашиваемых контроллеров внутри каждого модуля с различными моделями иерархии, но маршрут переопределяет с использованием routes.php внутри модулей никогда не читать.

Просмотреть MX_Router::locate он никогда не ищет routes.php внутри любого модуля.

Также он не переопределяет CI_Router::_set_routing, который ищет routes.php в папке config.

Вам необходимо переопределить CI_Router::_set_routing и прочитать config/router.php в каждом доступном модуле для переопределения маршрута вашего модуля.

0

Бронча показывает путь, я покажу вам код. Я использую это решение:

Вы должны редактировать _set_routing() в system/core/Router.php или продлить этот метод (лучше) в пределах MY_Router класса (third_party/Router.php).

Теперь он всегда должен загрузить module/config/routes.php ... (это около линии 140)

// Load the routes.php file. 
     if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/routes.php')) 
     { 
      include(APPPATH.'config/'.ENVIRONMENT.'/routes.php'); 
     } 
     elseif (is_file(APPPATH.'config/routes.php')) 
     { 
      include(APPPATH.'config/routes.php'); 
     } 

     // Include routes every modules 
     $modules_locations = config_item('modules_locations') ? config_item('modules_locations') : FALSE; 
     if(!$modules_locations) 
     { 
      $modules_locations = APPPATH . 'modules/'; 
      if(is_dir($modules_locations)) 
      { 
       $modules_locations = array($modules_locations => '../modules/'); 
      } 
      else 
      { 
       show_error('Modules directory not found'); 
      } 
     } 
     foreach ($modules_locations as $key => $value) 
     { 
      if ($handle = opendir($key)) 
      { 
       while (false !== ($entry = readdir($handle))) 
       { 
        if ($entry != "." && $entry != "..") 
        { 
         if(is_dir($key.$entry)) 
         { 
          $rfile = Modules::find('routes'.EXT, $entry, 'config/'); 
          if($rfile[0]) 
          { 
           include($rfile[0].$rfile[1]); 
          } 
         } 
        } 
       } 
       closedir($handle); 
      } 
     } 

     $this->routes = (! isset($route) OR ! is_array($route)) ? array() : $route; 
     unset($route); 

Я надеюсь, что это поможет ...