0

こんにちは、複数ファイルのアップロードに問題があります。ファイルのプロパティにアクセスしようとすると、アクセスできなくなります。データをデバッグしたところ、出力は次のようになりました。配列を返す代わりに、data['files'] の下に文字列を返すだけです。そのため、「tmp_name」、「name」などのプロパティがありません.

ここに画像の説明を入力

私の .ctp ファイル内の私のコード:

<?= $this->Form->create('annonce') ?>
<fieldset>
    <legend><?= __('Publier une annonce') ?></legend>
    <?php
        echo $this->Form->input('title', ['label' => 'Titre annonce']);
        echo $this->Form->input('description', ['label' => 'Description annonce', 'type' => 'textarea']);
        echo $this->Form->input('price', ['label' => 'Prix ', 'type' => 'number', 'placeholder' => '0$']);
        echo $this->Form->input('type_annonce', array(
        'options' => array('Acheter', 'Vendre', 'Échanger', 'Autre'),
        'empty' => 'Choisissez une option'), ['label' => 'Je souhaite']);
        echo $this->Form->input('category', array(
        'options' => array('Cheval', 'Poney', 'Matériel', 'Pension', 'Demi-pension'),
        'empty' => 'Choisissez une option'), ['label' => 'Je souhaite']);

        echo $this->Form->input('files.', array('type' => 'file', 'multiple' => 'true', 'enctype'=>'multipart/form-data'));
    ?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>

そして私のコントローラー:

    public function add()
{
    debug($this->request);
    $now = Time::now();
    $this->log('In add annonce !', 'debug');
    $annonce = $this->Annonces->newEntity();
    if ($this->request->is('post')) {
        if(!empty($this->request->data)) {
            $this->Flash->succes(__('Annonce files not empty'));
            foreach ($this->request->data['files'] as $file) {
                $filename = $file['name'];
                $file_tmp_name = $file['tmp_name'];
                $dir = WWW_ROOT.'img'.DS.'upload';
                $allowed = array('png', 'jpg', 'jpeg');

                echo "<pre>"; print_r($photo); echo "</pre>";
                if ( !in_array( substr( strrchr( $filename , '.') , 1 ) , $allowed) ) {
                    throw new InternalErrorException("Error Processing Request.", 1);       
                }elseif( is_uploaded_file( $file_tmp_name ) ){
                    move_uploaded_file($file_tmp_name, $dir.DS.Text::uuid().'-'.$filename);
                }
            }
        }
        else {
            $this->Flash->error(__('Not in images'));
        }
        $annonce = $this->Annonces->patchEntity($annonce, $this->request->data);
        $annonce->id_user = $this->request->session()->read('Auth.User.id');
        $annonce->publication_date = $now;
        if ($this->Annonces->save($annonce)) {
            $this->log('Success saving annonce !', 'debug');
            $this->Flash->success(__('The annonce has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->log($annonce->errors(), 'debug');
            $this->Flash->error(__('The annonce could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('annonce'));
    $this->set('_serialize', ['annonce']);
}
4

2 に答える 2

3

この構造を試してみてください。

<?= $this->Form->create($annonce, ['type' => 'file']) ?>
    ...
    <?= $this->Form->input('files[]', ['type' => 'file', 'class' => 'file', 'multiple', 'label' => __('Select Images')]) ?>
    ... 
<?= $this->Form->end() ?>
于 2016-06-23T06:27:28.087 に答える
2

フォームにファイルが含まれている場合は、フォームにenctype='multipart/form-data'を追加する必要があります。このようにします:

<?= $this->Form->create($annonce, ['type' => 'file']) ?>

注 - 文字列ではなく、フォーム作成ヘルパー関数の最初のパラメーターとしてエンティティを直接使用する必要があります。

于 2016-06-23T06:20:31.543 に答える