2012-03-04 3 views
1

ファイルを選択しないと、時間の検証は機能せず、「無効なファイル」というメッセージは表示されません。ケーキのファイルでファイルの検証が機能しない

これがアクションURLである:

http://localhost/carsdirectory/cars/create_ad

create_ad.ctp(ビュー)

<?php echo $this->Form->create('Car', array('type' => 'file', 'action' => 'create_ad')); ?> 

     <?php echo $this->Form->file('CarImage.image_path')?> 

<?php echo $this->Form->end(array('label' => 'Submit', 'name' => 'Submit', 'div' => array('class' => 'ls-submit')));?> 

car_image.php(モデル)

<?php 
class CarImage extends AppModel 
{ 
var $name = 'CarImage'; 

var $belongsTo = 'Car'; 

var $validate = array(

'image_path' => array(

'rule' => array('extension', array('jpeg', 'jpg', 'png', 'gif')), 

'allowEmpty' => false, 

'required' => true, 

'message' => 'invaid file' 
     ), 

    'car_id' => array(
      'rule' => "numeric", 
      'allowEmpty' => false, 
      'message' => 'Car details could not be saved' 
    ) 


     ); 
} 
?> 

car_images(テーブル)

車種:

public $hasMany = array(
    'CarImage' => array(
     'className' => 'CarImage', 
     'foreignKey' => 'car_id', 
     'dependent' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ), 
); 

から

フィールド私はコメントし、右のあなたのスキームに従って、あなたがこれらの関連を持っているということです思える示唆したように> 1)ID 2)IMAGE_PATH 3)

+1

まず、関係が間違っていると思います。「Car hasMany CarImage」と「CarImage belongsTo Car」を試してみてください。 'create_ad()'メソッドを投稿してください。 –

+0

ok Mr Paulo、私はそれを試します –

+0

氏Paulo、私はそれを並べ替えることはできません、もっと説明することができます。 –

答えて

3

をcar_id CarImageモデル:

:フォームの

public $belongsTo = array(
    'Car' => array(
     'className' => 'Car', 
     'foreignKey' => 'car_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

フィールド、あなたがアップロードする多くのファイルを(ちょうど数増分で新しい行を作成する)ことができますので、

echo $this->Form->file('CarImage.0.image_path'); 

を検証し、ファイルをアップロードするには、より簡単に、(あなたは$の検証変数でcar_idを必要とする場合、私は動作しない場合は、$の検証からcar_idを削除しようと、わからない)CarImageモデルでこれを行うことがより一貫性があります:

public $validate = array(
    'image_path' => array(
     'uploadFile' => array(
      'rule' => array('uploadFile'), 
      'message' => 'Invalid file', 
     ), 
    ), 
); 

public function uploadFile($params) { 
    if ($params['image_path']['error'] == 0) { 
     $file = pathinfo($params['image_path']['name']); 

     if (in_array($file['extension'], array('jpeg', 'jpg', 'png', 'gif'))) { 
      $tmp_file = new File($params['image_path']['tmp_name']); 
      if ($tmp_file->copy('folder_inside_webroot' . DS . $file['basename'])) { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

そして、あなたのコントローラが代わりにsavesaveAll必要があります。

if ($this->Car->saveAll($this->data)) { 
    // success 
} else { 
    // failure 
} 

私はそれが役に立てば幸い。

+0

ありがとうMr Paulo私はそのことを試してみました –

+0

Mr Paulo、私にはcar_controller.php(コントローラ)を使っています。 ($ this-> Car-> saveAll($ this-> data)){ //成功 } else { //失敗 } –

+0

これは質問です、はい、cars_controllerで使用しますフォームの動作が呼び出されます。 –

関連する問題