2012-06-22 2 views
1

Я проектирование системы, в которой взгляд Ури как следующийконтроллеров CodeIgniter в подпапках

my-app.com/client-name/admin/foo 
my-app.com/client-name/admin/bar 

Где клиент-имя переменное. Очевидно, я хочу, чтобы контроллеры admin в подпапке поддерживали мой разум. Так что мои папки могут выглядеть следующим образом ...

/application/controllers/admin/foo.php 
/application/controllers/admin/bar.php 

Проблема:

Из документов: «Упорядочивание контроллеров в подпапках При использовании этой функции первый сегмент вашего URI должен указать папка «.

Есть ли все-таки обойти это?

Могу ли я создать контроллер ADMIN

/application/controllers/admin.php 

и использовать функцию _remap вручную загружать контроллеры из вложенной папки?

обновление:

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

// Admin Root 
$route['(:any)/admin'] = "admin/welcome"; 

Затем перед любыми контроллерами нагрузить я проверить первый сегмент URI, чтобы убедиться, что клиент не существует.

Все клиенты используют одни и те же контроллеры и маршруты.

+0

Используете ли вы одни и те же контроллеры для всех клиентов? – greenLizard

+0

Да, я добавлю информацию о маршрутизации на свой пост –

ответ

4

Вы можете попытаться расширить свой метод маршрутизации. как:

<?php 

/* 
* Custom router function v 0.1 
* 
* Add functionality : read into more than one sub-folder 
* 
*/ 

Class MY_Router extends CI_Router 
{ 
    Function MY_Router() 
    { 
     parent::CI_Router(); 
    } 

    function _validate_request($segments) 
    { 
     if (file_exists(APPPATH.'controllers/'.$segments[0].EXT)) 
     { 
      return $segments; 
     } 

     if (is_dir(APPPATH.'controllers/'.$segments[0])) 
     { 
      $this->set_directory($segments[0]); 
      $segments = array_slice($segments, 1); 

      /* ----------- ADDED CODE ------------ */ 

      while(count($segments) > 0 && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0])) 
      { 
       // Set the directory and remove it from the segment array 
      $this->set_directory($this->directory . $segments[0]); 
      $segments = array_slice($segments, 1); 
      } 

      /* ----------- END ------------ */ 

      if (count($segments) > 0) 
      { 
       if (! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT)) 
       { 
        show_404($this->fetch_directory().$segments[0]); 
       } 
      } 
      else 
      { 
       $this->set_class($this->default_controller); 
       $this->set_method('index'); 

       if (! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) 
       { 
        $this->directory = ''; 
        return array(); 
       } 

      } 

      return $segments; 
     } 

     show_404($segments[0]); 
    } 
} 

?> 

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

Я не беру на себя ответственность за вышеуказанный код, исходную ссылку можно найти здесь. http://glennpratama.wordpress.com/2009/10/20/multi-level-subfolder-for-controller-in-codeigniter/

+0

Пробовал, что замена маршрутизатора, просто сломал все :( –

0

Оказалось, что это просто работает, если вы настраиваете маршруты вручную.

Awesome!

+0

Было бы неплохо добавить код к вашему ответу или объяснить, как вы его решаете. –

Смежные вопросы