Başlığa bakınca anlaşılması zor olabiliyor ama başlık konusunda aklıma daha iyi bir seçenek gelmedi . O yüzden ilk önce sorunu anlatayım. Codeigniter‘ı indirdiğinizde default controller yani siteniz açıldığınızda ekrana gelecek controller ayarınız aşağıdaki gibidir.
1 |
$route['default_controller'] = 'welcome'; |
Ben projem için daha düzenli bir yapı olması için controller dosyalarını frontend ve backend olarak ayırmaya karar vermiştim. Default controller dışında sorun olmamıştı. Ama aşağıdaki gibi kullanım yapınca codeigniter default controller dosyasını bulamıyor.
1 |
$route['default_controller'] = 'frontend/welcome'; |
Bu sorun sadece default controller için oluyor diğer controller dosyalarında sorun yok. Şimdi ise çözüme geçelim . Codeigniter application/core klasörüne MY_Router.php adında bir dosya oluşturuyoruz ve içine aşağıdaki kodları yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php class MY_Router extends CI_Router { protected function _set_default_controller() { if (empty($this->default_controller)) { show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.'); } // Is the method being specified? if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) { $method = 'index'; } // This is what I added, checks if the class is a directory if( is_dir(APPPATH.'controllers/'.$class) ) { // Set the class as the directory $this->set_directory($class); // $method is the class $class = $method; // Re check for slash if method has been set if (sscanf($method, '%[^/]/%s', $class, $method) !== 2) { $method = 'index'; } } if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) { // This will trigger 404 later return; } $this->set_class($class); $this->set_method($method); // Assign routed segments, index starting from 1 $this->uri->rsegments = array( 1 => $class, 2 => $method ); log_message('debug', 'No URI present. Default controller set.'); } } |