1

ケーキで空でないことを検証するための入力型ファイルを取得するには?

ファイルを追加せずにフォームを送信すると、$this->request->data にファイルが表示されていても、検証で空であると表示されます。

// Model/Product.php

class Product extends AppModel {
  public $validate = array(
    'name' => array(
        'rule' => 'notEmpty'
    ),
 );

}

// コントローラ/ProductController.php

 public function add() {
    if ($this->request->is('post')) {
        $this->Product->create();
        if ($this->Product->save($this->request->data)) {
            $this->Session->setFlash('Your product has been saved.');
        } else {
            $this->Session->setFlash('Unable to add your product.');
            debug($this->request->data);
            debug($this->Product->validationErrors);
        }
    }
}

// View/Products/add.ctp

echo $this->Form->create('Product', array('type' => 'file'));
echo $this->Form->input('name', array('type' => 'file'));
echo $this->Form->end('Save Post');
4

1 に答える 1

3

-somewhat special- file フィールドで実際に notEmpty を使用できるとは思いません。file フィールドは、結果としてスーパーグローバルな $_FILES を返すため、他の入力フィールドとは異なる方法で処理されます。そのため、少し異なる方法でチェックする必要があります。CakePHP のドキュメントには、実際に非常に良い例があります。

これは実際にアップロードされたファイル用ですが、nameキーが空でなく実際に設定されているかどうかを確認することで簡単に変更できます。モデルのカスタム検証ルールとして次のようなものを使用すると、うまくいくはずです。

public function fileSelected($file) {
    return (is_array($file) && array_key_exists('name', $file) && !empty($file['name']));
}

そして、これをファイルフィールドの検証ルールとして設定するだけです:

public $validate = array(
   'name' => array(
       'rule' => 'fileSelected'
   ),
);
于 2012-10-20T12:35:02.070 に答える