2016-03-24 21 views
0

Codeigniter 3.0 kullanıyorum. Alt klasörde dosyaya yönlendirilemedi. Sonra, bu kılavuzdaki sistem/çekirdek dosyasında route.php dosyasını düzenliyorum: default controller inside subfolder codeigniter 3 not working Sayfa, doğru yönlendirmeyi yapabilir. Ama ben böyle yükleme konak sonra hata alıyorum: "İstenen dosyayı yüklenemedi: ön/home.php" benim yapısı:Codeigniter 3.0 - İstenilen dosya yüklenemedi: subfolder/file.php

-controllers 
    -frontend 
    Home.php 
-views 
    - frontend 
    Home.php 

Benim rota dosyası:

$route['default_controller'] = 'frontend/Home'; 

Sınıfın adını, ilk karakterin durumunu kontrol ettim.

+0

"İstenilen dosya yüklenemiyor" gibi görünüyor; Denetleyici olsaydı - bir 404 hata iletisi olur. "$ This-> load-> view" ("frontend/home"); ' – MackieeE

cevap

0

CodeIgniter, home yöntemiyle Frontend denetleyicisini arar. Bunu iki yolla çözebilirsiniz. İlk iw sonraki kodla controllers dizinde Home.php denetleyicisi yapmak:

<?php defined('BASEPATH') OR exit('Restricted area!'); 

class Frontend extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function index() 
    { 
     $this->home(); 
    } 

    public function home() 
    { 
     redirect('frontend/home', 'refresh'); 
    } 
} 

$route['default_controller'] = 'home'; 

İkinci yolu özel yapılmış yönlendirici sınıfını kullanmaktır kod APPPATH.'config/routes.php' ile:

<?php 

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

class MY_Router extends CI_Router 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public 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]); 
    } 
} 

Credits.

+0

cevabınız için teşekkürler. ama benim sorunum ana bilgisayar üzerinde rota yapamıyor. Kontrol ettim ama hala çalışmıyor. –

+0

Cevabı düzenledim, bu şekilde deneyin (ilk çözüm). – Tpojka

+0

Burada bir sorun var. $ rota ['default_controller'] = 'ev'; => CI home.php sınıfını controllers klasöründe bulacak (not: D) ​​çünkü home.php ön alt klasörde Btw, herhangi bir çözüm yönlendirmiyor mu? –

İlgili konular