2013-04-18 49 views
0

我有一個問題,我想告訴你。 我已經在課堂帖子的appmodel中設置了自定義驗證規則。蛋糕的PHP分隔符不能是字母數字或反斜槓與自定義驗證規則

'DELIVERYAREA' => array(
     'rule-1' => array(
      'rule' => array('between', 5, 5), 
      'message' => 'Bitte eine fünfstellige Postleitzahl eingeben' 
     ), 
     'rule-2' => array(
      'rule' => 'numeric', 
      'message' => 'Bitte nur Zahlen eingeben' 
     ), 
     'rule-3' => array(
      'rule' => 'ZipExists', 
      'message' => 'Postleitzahl existiert nicht!'    
     ) 
    ) 

函數ZipExists也在appmodel中編碼,但在類郵政編碼中。

public function ZipExists($zipcode){ 
$valid = $this->find('count', array('conditions'=> array('Zipcode.zipcode' =>$zipcode))); 
if ($valid >= 1){ 
    return true; 
} 
else{ 
    return false; 
} 
} 

debug($ valid)引發正確的數字:1如果函數找到有效的郵政編碼則爲0,否則爲0。這就是說這個函數被正確調用。 但蛋糕做了兩件事。 首先它會拋出一個錯誤:分隔符不能是字母數字或反斜槓。由於嘗試array_push($ zipcode);在該功能沒有工作,我沒有一個線索。

其次,對於Deliveryarea視圖中的錯誤消息始終顯示,無論函數是真是假,都無關緊要。

在此先感謝。

+0

前兩個驗證規則可以用'postal'驗證來代替,它也支持德國郵政編碼驗證; http://book.cakephp.org/2.0/en/models/data-validation.html#Validation::post但是,我懷疑錯誤信息可能是由另一個驗證規則引起的,CakePhp將其解釋爲正則表達式。您是否嘗試禁用所有其他驗證規則以縮小問題範圍? – thaJeztah

+0

禁用所有其他變化無效。我得到的錯誤蛋糕couldn't找到zipexists驗證處理建設中的郵政功能你提到後再:「DELIVERYAREA」 =>陣列( 「規則-1」 =>陣列( \t \t \t \t「規則'=>數組(' 郵政」,NULL, '去'), \t \t \t \t '消息'=> 'BITTE EINEgültigePostleitzahl eingeben。', \t \t \t \t '最後'=>真 \t \t \t ), \t \t \t'rule -2' =>數組( \t \t \t \t '規則'=>數組( 'ZipExists'), \t \t \t \t '消息'=>「Postleitzahl existiert nicht!' ) ) – Karl

+0

在閱讀和調試了很多之後,我強烈推測Cake想要在後期課程中使用自定義函數「ZipExists」 - 它被調用的類。但是我需要在類Zipcode中存在時調用該函數。但目前這本書和網絡在這個話題上沒有什麼可提供的。也許我只有在找到信息時運氣不好?! – Karl

回答

0

我找到了解決方案。 Cake希望自定義驗證規則位於調用規則的某個類中。所以,當你在課堂中調用一個自定義規則時,自定義函數必須寫在課程後,否則蛋糕不會每次都找到並驗證它爲false。

這裏要做的神奇之處就是導入你想在你調用驗證函數的類中使用的appmodel類。這與以下聲明一起工作:

$ Zipcode = ClassRegistry :: init('Class to use - in my case「Zipcode」');

但是,如果您的表格與hasAny或belongsTo以及其他東西相互關聯,則自定義函數將在沒有該功能的情況下運行。另一個重要的點你不能錯過的是,所有的驗證功能必須與「公共功能xyz」引入,否則蛋糕也不會找到它們。

相關問題