昨天我張貼的問題CakePHP 3 - Using reusable validators但我仍然在努力瞭解如何驗證數據時,它是不依賴於特定的數據庫表,或一套表中的字段。CakePHP的3 - 驗證不依賴於一個表中的數據(驗證沒有任何數據庫參與)
我想要做的是上傳CSV文件。 CSV中的數據可能最終會在數據庫中,但之前發生任何這種情況,我想驗證該文件以確保其有效 - 擴展名爲.csv,MIME類型爲text/csv
,文件大小爲< 1 Mb 。這個特殊的驗證與數據庫完全無關。
這樣的驗證去了哪裏,因爲它與數據庫表無關?
我用的方法如下 - 但這不工作:
我有一個upload()
方法UploadsController.php
。此方法處理上傳(表單發送到/uploads/upload
)
我加入以下到我的src/Model/Table/UploadsTable.php
(因爲我不知道還有什麼地方把這樣的代碼):
public function validationDefault(Validator $validator)
{
$validator
->add('submittedfile', [
'mimeType' => [
'rule' => array('mimeType', array('text/csv')),
'message' => 'Upload csv file only',
'allowEmpty' => TRUE,
],
'fileSize' => [
'rule' => array('fileSize', '<=', '1MB'),
'message' => 'File must be less than 1MB.',
'allowEmpty' => TRUE,
]
]);
return $validator;
}
在UploadsController::upload()
我有這個:
if ($this->request->is('post')) {
debug($this->request->data['submittedfile']);
$uploads = TableRegistry::get('Uploads');
$entity = $uploads->newEntity($this->request->data['submittedfile']);
debug($entity);
}
無論我上傳什麼文件,都不會返回錯誤。即使我註釋掉整個validationDefault
方法,行爲也不會改變。
因爲Cake的網站上的所有文檔都在討論與數據庫表有關的數據,所以這變得非常令人沮喪。那麼,如果你試圖驗證與數據庫表無關的事情呢?
我已經打開這個作爲一個新的問題,因爲最後一個沒有真正解決這個問題。
Other questions posted about this不解決這個問題,因爲在這種情況下,他們正在編寫的文件信息到數據庫表,因此驗證文件同時。在我的情況下,我沒有試圖這樣做,我只是想在驗證文件之前,在考慮任何與數據庫有關的事情之前。我還希望代碼驗證CSV是否可重用(即不在一個特定的Controller方法中),因爲如果我想在應用程序的5個不同部分檢查有效的CSV,爲什麼我應該重複執行相同的代碼一切都結束了嗎?