2013-10-03 63 views
0

我有一個表格,用戶可以上傳圖片,而我將它打印到頁面,像這樣:CakePHP的驗證未檢測表單字段

<?php echo $this->Form->label('file', 'Image file', array('class' => 'col-lg-1 control-label')); ?> 

然後,在模型中我設置了驗證像所以:

public $validate = array(
    'file' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'You must select an image to upload' 
     ), 
     'extension' => array(
      'rule' => array('extension', array('png')), 
      'message' => 'Images must be in PNG format' 
     ), 
     'size' => array(
      'rule' => array('fileSize', '<', '1MB'), 
      'message' => 'Images must be no larger than 1MB' 
     ), 
     'goodUpload' => array(
      'rule' => 'uploadError', 
      'message' => 'Something went wrong with the upload, please try again' 
     ) 
    ) 
); 

然而,蛋糕似乎並不被表單字段有效性規則關聯,因爲如果我選擇要上傳的圖片我總是得到「你必須選擇要上傳的圖片」的形式錯誤。我已確認表格有enctype="multipart/form-data"

這是發生因爲file不是數據庫領域?我怎樣才能讓蛋糕在file上運行一些驗證?

編輯:這是我的整個形式,要求:http://pastebin.com/SbSbtDP9

+0

你可以發佈整個表單的代碼嗎? – Andrew

+0

當然,不得不將它上傳到Pastebin,因爲它很長。 –

+0

有你看着這個頁面上的驗證上傳部分:http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html – Andrew

回答

1

您可以驗證不在數據庫中的字段,只要你有正確的模型正確的字段名稱。

從我可以在你的代碼中看到,似乎你的輸出標籤而不是實際的輸入,圖片上傳我會嘗試

echo $this->Form->create('Model', array('type'=>'file')); 
echo $this->Form->input('file', array('type'=>'file')); 
echo $this->Form->submit('Upload Image'): 
echo $this->Form->end(); 

爲了驗證我會嘗試像其餘的東西你的驗證選項(大小,等等)CakePHP通常在File Uploads上的notEmpty上拋出一個錯誤。所以只需檢查擴展類型通常就足夠了。

public $validate = array(
    'file' => array(
    'rule' => array(
    'extension', array('jpeg', 'jpg') 
    'message' => 'You must supply a file.' 
    ) 
    ) 
); 

的時間爲CakePHP的圖片上傳多數我訴諸一個插件如https://github.com/josegonzalez/cakephp-upload它驗證並上傳處理於一身。

+0

他有'$此 - > Form-> form(...)'在他的代碼中。沒有必要爲不在數據庫中的字段做特別的事情嗎? – Andrew

+1

不,但他的Form-> create在選項數組中需要'type'=>'file'。 –

+0

好的,只是看着pastebin,因爲我不能在原始問題上添加評論,我會在這裏發表評論!織補低代表:( 如果你改變$這個 - >形式 - >文件();被$ this->形式 - >輸入( '文件',陣列( '類型'=> '文件'));?它是否驗證? –

0

管理弄清楚。事實證明,在文件字段上進行notEmpty驗證時,它總是認爲沒有任何內容,因此始終引發驗證消息。

通過編寫我自己的驗證方法來解決它。