2014-01-14 12 views
0

讀取表單驗證文檔後:可以定義自定義表單驗證回調在全球範圍內的笨

http://ellislab.com/codeigniter%20/user-guide/libraries/form_validation.html#callbacks

導致我相信,所有的自定義表單驗證回調必須在控制器內定義。我可以考慮幾個實例,其中像這樣的函數應該在助手文件中定義,並因此按CI設計加載到全局名稱空間中。這可能嗎?似乎CI有一些內置的限制,這些限制很難改變或解決。

+0

驗證應始終在控制器中,沒有一個幫手文件來完成。在什麼情況下你需要驗證在輔助文件中完成? Helper's主要用於不依賴Codeigniter任何部分的基本函數(儘管您仍然可以在幫助器中使用Codeigniter函數)。比如在網站上設置格式化日期和時間的功能,這就是使用幫手的一種情況。 –

回答

1

想想這樣 - 如果回調只在您驗證表單時纔會被調用 - 那麼它並不需要以任何方式爲'全局'。

有些人致力於在控制器中進行驗證,因此他們主張擁有「胖控制器」。我的建議是在模型中進行表單驗證。一個好處是,如果您需要從不同的地方調用表單驗證 - 這就是您詢問幫助人員所暗示的 - 您可以從任何控制器(或其他模型)非常容易地調用驗證。所以你不需要加載一個單獨的幫助文件 - 並且模型的名稱和方法應該明確什麼是被驗證的。

另一個好處是,如果您更改或更新您的表單以及驗證和回調 - 這一切都發生在模型中。控制器代碼不會更改,如果您從不同的地方調用此驗證,這又會有所幫助。

這裏是你可能會發現有用的另一個反應: Codeigniter Form Validation in Model

0

你不能這樣做,ci出來了幾個核心功能,你不能改變。

在你的情況下,你需要:

  1. 您需要包括CI核心校驗類你的助手
  2. 然後創建使用它的對象。
3

實際上,你可以定義「全局」驗證規則自己。只需擴展CI_Form_Validation類。

class MY_Form_validation extends CI_Form_validation {

這個類必須在應用程序/庫文件夾。在那裏添加你的驗證功能,CI將提取你的課程版本。在這種情況下,您不需要在規則中添加callback_前綴。

$this->form_validation->set_rules('field', 'Field', 'your_function');

+1

並且在實際的'your_function()'中用'$ this-> set_message('your_function','你的錯誤信息')設置錯誤信息。 _Not_'$ this-> form_validation-> set_rules(...'。 – ourmandave