2009-05-11 18 views
5

CodeIgniter, etkin bir "denetleyici bulunamadı" durumu nedeniyle bir 404 olduğunda görüntülenen /system/application/errors/error_404.php dosyasına sahiptir. Ancak, benim projem için, denetleyici sınıfından bir yöntem eksik olduğunda olduğu gibi ele alınması gereken bu hatayı gerçekten istiyorum. Bu durumda, güzel bir sayfa ile normal bir görünüm gösteriyorum "Sayfa bulunamadı: Belki de bunu kastediyorsunuz? ..." sayfa veritabanı tarafından oluşturulan gezinme vb. Ile tamamlandı.CodeIgniter için iyi bir hata 404 işleyicisi nasıl oluştururum?

Düşüncelerim iki şeyden birini yapabilirim :

  1. bunu gerçekleştirmesi için varsayılan yönlendirici çeşit ekleme varolan (veya özel) kontrolörün 404 işleyicisi
  2. yönlendirmek için bir header("Location: /path/to/error_page") görüşmesi oluşturabilir.

Gerekli sonuca ulaşmanın en iyi yolu nedir? Dikkat edilmesi gereken herhangi bir tuzak var mı?

cevap

2

CodeIgniter'ı Smarty ile kullanıyorum. Smarty sınıfımda notfound() adında ek bir işlev var. Notfound() öğesini çağırmak, doğru başlık konumunu bir 404 sayfasına ayarlar ve daha sonra bir 404 şablonu görüntüler. Şablonun geçersiz bir başlığı ve mesajı var, bu yüzden çok yönlü. , Aynı şekilde

$this->load->model('article_model'); 
$article = $this->article_model->get_latest(); 

if ($article) { 
    $this->smarty->assign('article', $article); 
    $this->smarty->view('article'); 
} else { 
    $this->smarty->assign('title', Article not found'); 
    $this->smarty->not_found(); 
} 

ben /system/application/error/error_404.php kodu değiştirebilirsiniz:

Smarty.class.php 

function not_found() { 
header('HTTP/1.1 404 Not Found'); 

if (!$this->get_template_vars('page_title')) { 
    $this->assign('page_title', 'Page not found'); 
    } 

    $this->display('not-found.tpl'); 
    exit; 
} 

bir denetleyici olarak böyle bir şey yapabilirsiniz: İşte bazı örnek kod var

$CI =& get_instance(); 
$CI->cismarty->not_found(); 

Harika çalışıyor, az miktarda kod kullanıyor ve farklı türde eksik öğeler için 404 işlevselliğini çoğaltmıyor.

Sanırım yerleşik CodeIgniter görünümleriyle benzer bir şey yapabilirsiniz. Önemli olan, bakışınızı yapmadan önce başlığa tükürmek.

Güncelleme:

Using Smarty with CodeIgniter

: Burada anlatılan benzer bir özel Smarty sarmalayıcı kullanın
İlgili konular