2015-06-30 144 views
1

如何获取每个文件的所有数据?多个文件/图像上传CakePHP 3

我不确定如何使用CakePhp 3语法上传多个文件。我已经看过插件的帖子,但我想知道如何做到这一点,而无需为简单的任务使用插件。

这里是我的形式:

<div class="havesAndWants form large-10 medium-9 columns"> 
    <?= $this->Form->create($havesAndWant, ['type' => 'file']) ?> 
    <fieldset> 
     <legend><?= __('Add Haves And Want') ?></legend> 
     <?php 
      echo $this->Form->input('contact_name'); 
      echo $this->Form->input('contact_email'); 
      echo $this->Form->input('contact_phone'); 
      echo $this->Form->input('contact_street_address'); 
      echo $this->Form->input('contact_city'); 
      echo $this->Form->input('contact_state'); 
      echo $this->Form->input('contact_zip'); 
      echo $this->Form->input('ad_street_address'); 
      echo $this->Form->input('ad_city'); 
      echo $this->Form->input('ad_state'); 
      echo $this->Form->input('ad_zip'); 
      echo $this->Form->input('ad_additional_info', ['label' => 'Ad Description']); 
      echo $this->Form->input('ad_photos', ['type' => 'file', 'multiple' => 'multiple', 'label' => 'Add Some Photos']); 
     ?> 
    </fieldset> 
    <?= $this->Form->button(__('Submit')) ?> 
    <?= $this->Form->end() ?> 
</div> 

我似乎无法抓住所有的数据从多个文件。它抓取第一个文件,并为每个文件分发相同的信息,即使它们是不同的文件。

控制器:

$photos = $this->request->data['ad_photos']; 
foreach ($photos as $photo) { 
       $photo = [ 
        'name' => $this->request->data['ad_photos']['name'], 
        'type' => $this->request->data['ad_photos']['type'], 
        'tmp_name' => $this->request->data['ad_photos']['tmp_name'], 
        'error' => $this->request->data['ad_photos']['error'], 
        'size' => $this->request->data['ad_photos']['size'] 
       ]; 
       echo "<pre>"; print_r($photo); echo "</pre>"; 
      } 

输出:

Array 
(
    [name] => DPC.jpg 
    [type] => image/jpeg 
    [tmp_name] => C:\wamp\tmp\dpze123.tmp 
    [error] => 0 
    [size] => 2288982 
) 
Array 
(
    [name] => DPC.jpg 
    [type] => image/jpeg 
    [tmp_name] => C:\wamp\tmp\dpze123.tmp 
    [error] => 0 
    [size] => 2288982 
) 
Array 
(
    [name] => DPC.jpg 
    [type] => image/jpeg 
    [tmp_name] => C:\wamp\tmp\dpze123.tmp 
    [error] => 0 
    [size] => 2288982 
) 
Array 
(
    [name] => DPC.jpg 
    [type] => image/jpeg 
    [tmp_name] => C:\wamp\tmp\dpze123.tmp 
    [error] => 0 
    [size] => 2288982 
) 
Array 
(
    [name] => DPC.jpg 
    [type] => image/jpeg 
    [tmp_name] => C:\wamp\tmp\dpze123.tmp 
    [error] => 0 
    [size] => 2288982 
) 

注意它是如何都是一样的信息?

回答

5

由于在CakePHPs的家伙支持

http://webchat.freenode.net/?channels=cakephp&uio=MT1mYWxzZSY5PXRydWUmMTE9MjQ2b8

我得到了问题的答案。我以为我需要使用$ post数组来设置文件信息的变量。在CakePhp Docs中,它显示了一个很好的例子,它不是必需的。我拿出的代码块:

$photo = [ 
        'name' => $this->request->data['ad_photos']['name'], 
        'type' => $this->request->data['ad_photos']['type'], 
        'tmp_name' => $this->request->data['ad_photos']['tmp_name'], 
        'error' => $this->request->data['ad_photos']['error'], 
        'size' => $this->request->data['ad_photos']['size'] 
       ]; 

和我的输入名称的文件上传这样增加了[]:

echo $this->Form->input('ad_photos[]', ['type' => 'file', 'multiple' => 'true', 'label' => 'Add Some Photos']); 

当时我能够抓住所有每个文件的信息。