2016-09-28 19 views
4

如果我把一個控制器,一個2級的子文件夾中找到控制器「類別」不會找到它Codeingiter&HMVC無法如果在2級的子文件夾

application > modules > catalog > controllers > forum 

application > modules > catalog > controllers > forum > categories 

// unable to locate 
application > modules > catalog > controllers > forum > categories > Category.php 

// able to locate 
application > modules > catalog > controllers > forum > Category.php 

問題是possiable到修改MY_Router.php,這樣可以找到正確的文件夾,而不會影響其他任何東西。

我使用笨3.1.0和HMVC

我已經看過這個Unable to access the controller in subfolder但啓用時,它不會顯示default_controller。

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

/* load the MX_Router class */ 
require APPPATH."third_party/MX/Router.php"; 

class MY_Router extends MX_Router { 

    /** Locate the controller **/ 
    public function locate($segments) 
    { 
     $this->located = 0; 
     $ext = $this->config->item('controller_suffix').EXT; 

     /* use module route if available */ 
     if (isset($segments[0]) && $routes = Modules::parse_routes($segments[0], implode('/', $segments))) 
     { 
      $segments = $routes; 
     } 

     /* get the segments array elements */ 
     list($module, $directory, $controller) = array_pad($segments, 3, NULL); 

     /* check modules */ 
     foreach (Modules::$locations as $location => $offset) 
     { 
      /* module exists? */ 
      if (is_dir($source = $location.$module.'/controllers/')) 
      { 
       $this->module = $module; 
       $this->directory = $offset.$module.'/controllers/'; 

       /* module sub-controller exists? */ 
       if($directory) 
       { 
        /* module sub-directory exists? */ 
        if(is_dir($source.$directory.'/')) 
        { 
         $source .= $directory.'/'; 
         $this->directory .= $directory.'/'; 

         /* module sub-directory controller exists? */ 
         if($controller) 
         { 
          if(is_file($source.ucfirst($controller).$ext)) 
          { 
           $this->located = 3; 
           return array_slice($segments, 2); 
          } 
          else $this->located = -1; 
         } 
        } 
        else 
        if(is_file($source.ucfirst($directory).$ext)) 
        { 
         $this->located = 2; 
         return array_slice($segments, 1); 
        } 
        else $this->located = -1; 
       } 

       /* module controller exists? */ 
       if(is_file($source.ucfirst($module).$ext)) 
       { 
        $this->located = 1; 
        return $segments; 
       } 
      } 
     } 

     if(! empty($this->directory)) return; 

     /* application sub-directory controller exists? */ 
     if($directory) 
     { 
      if(is_file(APPPATH.'controllers/'.$module.'/'.ucfirst($directory).$ext)) 
      { 
       $this->directory = $module.'/'; 
       return array_slice($segments, 1); 
      } 

      /* application sub-sub-directory controller exists? */ 
      if($controller) 
      { 
       if(is_file(APPPATH.'controllers/'.$module.'/'.$directory.'/'.ucfirst($controller).$ext)) 
       { 
        $this->directory = $module.'/'.$directory.'/'; 
        return array_slice($segments, 2); 
       } 
      } 
     } 

     /* application controllers sub-directory exists? */ 
     if (is_dir(APPPATH.'controllers/'.$module.'/')) 
     { 
      $this->directory = $module.'/'; 
      return array_slice($segments, 1); 
     } 

     /* application controller exists? */ 
     if (is_file(APPPATH.'controllers/'.ucfirst($module).$ext)) 
     { 
      return $segments; 
     } 

     $this->located = -1; 
    } 
} 
+0

應用>模塊是所有方式首先這是HMVC – user4419336

回答

2

這可能是可能的,但是你真的需要嗎?

我可以排序的看到使用的感...

application > modules > catalog > controllers > forum > Category.php 

但我沒有看到使用的點...

application > modules > catalog > controllers > forum > categories > Category.php 

這會有點太深爲了把東西放進自己的小盒子裏。

個人而言,我會做一個論壇模塊,並有...

application > modules > forum > controllers > categories > Category.php 
+0

它只是一個形式控制器的分離,因爲類有一個像衛生組織回答我通過ajax調用的控制器。所以想着有更多的子文件夾是很好的。 – user4419336

相關問題