2014-01-26 26 views
0

請注意,我正在使用CakePHP 1.3。驗證長度取決於CakePHP中的設置

我想根據管理員在數據庫中定義的限制來驗證模型的幾個字段的長度。

我有一個叫做Setting的模型,通過它可以獲取maxLength值。我的想法是使用beforeValidate方法。來接他們,然後相應地設置$驗證參數:

<?php 
class Mod extends AppModel 
{ 
    var $belongsTo = array('IBelong'); 
    var $hasMany = array('IHaz'); 

    function beforeValidate() { 
     // Fetch the maxLength settings : requestAction to the SettingsController ? 
     // Somehow do $this->Setting->find... ? 

     // Then set the $validate attribute 
    } 
} 
?> 

我可以使用什麼方法來獲得在beforeValidate回調的最大長度值?

謝謝!

編輯:由Dave以下意見,這裏是我目前在做什麼(和它的作品):

<?php 
class Mod extends AppModel 
{ 
    var $belongsTo = array('IBelong'); 
    var $hasMany = array('IHaz'); 

    function beforeValidate() { 
     App::import('Model', 'Setting'); 
     $setting = new Setting(); 
     // Use $setting->find... to fetch the settings 
     // Set the $validate attribute to validate using the settings 
    } 
} 
?> 

不過,我仍然不知道這是正確的做法。

請注意,我有幾個屬性需要驗證,並且我想避免爲了獲得最佳性能而多次調用$ setting-> find。

回答

2

數據驗證在CakePHP book中有非常詳細的解釋。

如果您閱讀Custom Validation Rules area,您會看到一個示例,它們從數據庫中提取數據以用於驗證 - 完全像您想要的那樣。

(這裏的Custom Validation Rules for 1.3

+0

我看到這個例子的確,但我不知道一)將在調用該函數用於各個領域,當我嘗試保存模型?我想避免做5個SQL查詢,這就是爲什麼我想使用beforeValidate。 b)如何從此回調調用設置模型的查找方法? – personne3000

+0

爲什麼不只是做你在你的代碼中寫的東西 - $ this-> Setting-> find()假設設置與Mod關聯沒有任何錯誤。然後將您的設置設置爲$ this-> data ['Setting'] []或其他。 – Dave

+0

但是如果Setting與Mod沒有關聯呢?我的設置模型用於存儲應用程序的通用設置,因此設置和Mod之間沒有真正的語義鏈接(使用belongsTo或hasMany無意義) – personne3000