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
}
因此,爲了使長話短說:你不能停止從被提出的要求,你只能決定如何做時,該請求無效。
爲什麼不對add()進行POST檢查?只有帖子是允許的,你不能對它做一個GET。 – JohnP 2011-05-30 05:20:24