2013-02-23 64 views
4

我正在使用CodeignIter,並且正在尋找一種爲被調用的方法不存在時爲單個控制器編寫自定義處理例程的方法。如果CodeIgniter方法不存在,則重定向到默認方法。

比方說,你叫www.website.com/components/login

components控制器,還沒有一個叫login方法,所以不是發送404錯誤,它只會默認爲所謂default另一種方法。

回答

7

是的,有一個解決方案。如果您有Components控制器和flilename components.php。寫下面的代碼...

<?php 

if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class Components extends CI_Controller 
{ 

    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function _remap($method, $params = array()) 
    { 
     if (method_exists(__CLASS__, $method)) { 
      $this->$method($params); 
     } else { 
      $this->test_default(); 
     } 
    } 

    // this method is exists 
    public function test_method() 
    { 
     echo "Yes, I am exists."; 
    } 

    // this method is exists 
    public function test_another($param1 = '', $param2 = '') 
    { 
     echo "Yes, I am with " . $param1 . " " . $param2; 
    } 

    // not exists - when you call /compontents/login 
    public function test_default() 
    { 
     echo "Oh!!!, NO i am not exists."; 
    } 

} 

由於default被PHP保留你不能用它因此,你可以編寫自己的默認方法喜歡這裏test_default。這將自動檢查您的班級中是否存在方法並相應地進行重定向。它也支持參數。這對我來說非常合適。你可以測試自己。謝謝!!