Codeigniter Default Controller ‘ ı Klasör içine Route Yapmak

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.

[php]$route[‘default_controller’] = ‘welcome’;[/php]

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.

[php]$route[‘default_controller’] = ‘frontend/welcome’;[/php]

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.

[php]
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.’);
}
}
[/php]

Cem Karakurt:

Yorumları gör (3)

  • teşekkürler hocam laravelden geçince dumur etti beni başlık için öneri şu olabilir " Codeigniter Kontroller dosyasını taşımak " ben bu şekilde aradım bulamamıştım

  • Bilgi için çok teşekkürler gerçekten çok işime yaradı elinize sağlık fakat bunu diğer controller'lar içinde yapmak mümkünmü yani ben de karışıklıktan çok muzdarip durumdayım backend ve frontend olarak ayırmak istiyorum fakat sürekli dosya bulunamadı hatası alıyorum yani domain.com/admin dediğimde controller/back/Admin.php içerisini nasıl sorunsuz route edebilirim

    • routes.php dosyası içinde tanımlamayı yaptığınız zaman sıkıntı olmaması gerekiyor. $route['admin'] = 'back/admin';