2015-10-12 39 views
0

最近我做了兩個CakePHP web應用程序。第一次使用CakePHP格式的表需要它們,驗證似乎正常工作。對於第二個應用程序,我使用$useTable = false,而是使用[model name] - > query()函數在控制器內執行SQL存儲過程以保存和更新數據,但遇到了模型驗證的幾個問題。

示例1: 我有一個名爲'WeekName'的字段,它在數據庫中有50個字符的限制。我的模型驗證設置如下所示,它與Cake文檔相匹配,但它很高興地讓字符串長度超過50個字符試圖保存。

'WeekName' => array(
     'allowEmpty' => false, 
     'rule' => array('maxLength', '50'), 
     'message' => 'No more than 50 characters long.' 
    ),` 

實施例2: 我創建最近關於添加驗證問題,其中以包含在順序數據的控制器,用於處理數據所需的兩個字段中的一個。在嘗試了幾個建議之後,什麼也沒有起作用,它根本不檢查驗證,而是繼續處理控制器功能中的代碼。

Link to posted question

所有這些問題都使我懷疑,如果模型驗證時將忽略$useTable = false以及這是否是有意這樣做,如果有辦法,我可以在模型驗證開啓如果是這種情況。

如果有人對此問題有任何瞭解,以及可能導致該問題的原因或者是否有可能的解決方案,我們將不勝感激。

謝謝。

注:

使用CakePHP 2.7

+0

你已經聲明你使用'query()'來更新你的表,但是沒有提到你如何試圖驗證你的數據。你需要顯示一些你的代碼。另外,爲什麼如果你的模型有關聯表,你告訴Cake沒有表並手動查詢數據庫? – drmonkeyninja

+0

確保您陳述了您正在開發的CakePHP版本。 – drmonkeyninja

+0

@drmonkeyninja示例1是我試圖在模型中的'$ validate'數組內進行驗證的示例。我的問題集中在'$ useTable = false'是否會導致模型驗證問題,而不是我的驗證不起作用。 – Daniel

回答

2

CakePHP的驗證規則制定將與沒有表型號。但是,在使用$this->ModelName->query()保存數據之前,您似乎沒有對數據進行驗證。與save()不同,query()在保存之前不會自動運行驗證,因爲它不使用CakePHP的回調來測試數據。

除非真的有必要我會避免手動查詢數據庫query()和使用save()但如果你需要做到這一點,那麼你將不得不手動驗證過: -

$this->ModelName->set($this->request->data); 
if ($this->ModelName->validates()) { 
    // Save your data using query() 
    $this->ModelName->query(); 
} else { 
    // Validation failed 
} 

這臺對數據模型,然後根據模型的驗證規則運行設置的數據。如果成功,它將運行您的query()

請參閱文檔中的Validating Data from the Controller瞭解更多詳情。