2011-05-30 37 views
1

我有大約直接訪問功能,這個問題沒有直接聯繫:比如我有這樣的代碼:codeiginter到功能

控制器用戶

function index(){ 
//this is my users index view, user can add,edit,delete cars 
} 

function details($id){ 
//a function where 1 car can be viewed in detail.. 

function add(){ 
//function to add car 
} 

現在,如果我去地址欄並鍵入。 localhost/myapp/users /詳細信息將會轉到url並且由於$ id爲null而回顯錯誤。我想要的只是如果用戶可以輸入地址欄,則索引可以直接訪問。我不希望用戶直接去的myapp /用戶/添加等。

+0

爲什麼不對add()進行POST檢查?只有帖子是允許的,你不能對它做一個GET。 – JohnP 2011-05-30 05:20:24

回答

2

CI控制器功能總是必須能夠處理用戶輸入(即url段),這意味着任何人都可以輸入他們想要的內容並提出請求。你不能阻止這一點。最好的做法是要麼:

  • 始終提供默認參數
  • 使用URI類來獲得你的參數,或者func_get_args()
  • 始終驗證的傳遞給控制器​​的存在和參數完整性,你會與任何其他用戶輸入

因爲它是更爲常見,接受,更易於閱讀 - 只要確保始終提供默認值,驗證他們。

與控制器的一個例子:

function index() { 
    //this is my users index view 
    //user can add,edit,delete cars 
} 

function details($id = NULL) { 
    if (! $id) { 
     // No ID present, maybe redirect without message 
     redirect('users'); 
    } 
    $user = $this->user_model->get($id); 
    if (! $user) { 
     // ID present but no user found, redirect with error message 
     $this->session->set_flashdata('error_message', 'User not found'); 
     redirect('users'); 
    } 
    // We found a user, load view here etc. 
} 

function add() { 
    // Check for the presence of a $_POST value 
    // You could also use the Form_validation lib here 
    if (! $this->input->post('add_car') 
    { 
     $this->session->set_flashdata('error_message', 'Invalid request'); 
     redirect('users'); 
    } 
    // Try to add the car here and always redirect from here 
} 

唯一的另一種方法是使該方法私人或使用CI的_underscore()命名的建議(使它從網址無法訪問)。您仍然可以調用該函數在其他的方法,如果你願意的話,如:

function index() { 
    if ($this->input->post('add_car') 
    { 
     // Call the private "_add" method 
     $this->_add(); 
    } 
    // Load index view 
} 

因此,爲了使長話短說:你不能停止從被提出的要求,你只能決定如何做時,該請求無效。

+0

非常感謝..這個答案啓發了我。 – 2011-05-30 06:08:46

0

要隱藏的函數名前添加下劃線:

function _details($id){ 
//a function where 1 car can be viewed in detail.. 
} 
function add(){ 
//function to add car 
} 
+0

如果我做_details ..頁面將返回404錯誤。找不到網頁。 – 2011-05-30 05:27:56

+0

對不起,沒有辦法驗證您的輸入。 – 2011-05-30 05:35:29

+1

是的,如果您訪問任何不存在的網址,則會出現404錯誤。當你使用下劃線時,它會阻止URL被URL訪問,所以你得到了404。當你隱藏一個函數時,你想要什麼? – Femi 2011-05-30 05:40:37