简体   繁体   English

多个文件/图像上传CakePHP 3

[英]Multiple File / Image Uploads CakePHP 3

How do I grab all the data for each file? 如何获取每个文件的所有数据?

I am not sure how to upload multiple files with CakePhp 3 syntax. 我不确定如何使用CakePhp 3语法上传多个文件。 I have seen posts for plugins, but I would like to know how to do it without having to use a plugin for a simple task. 我已经看过有关插件的文章,但是我想知道如何做到这一点,而不必将插件用于简单的任务。

Here is my form: 这是我的表格:

<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>

I can't seem to grab all of the data from the multiple files. 我似乎无法从多个文件中获取所有数据。 It is grabbing the first file and spitting out the same info for each file even though they are different files. 它正在抓取第一个文件,并为每个文件吐出相同的信息,即使它们是不同的文件也是如此。

Controller: 控制器:

$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>";
            }

Output: 输出:

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
)

Notice how it is all the same info? 请注意,所有信息都是一样的吗?

Thanks to the guys at CakePHPs Support 感谢CakePHPs支持人员

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

I got the answer to the question. 我得到了问题的答案。 I thought I needed to use the $post array that I had in order to set the variables for the file info. 我以为我需要使用我拥有的$ post数组来设置文件信息的变量。 In CakePhp Docs it shows an example of this and well, it isn't needed. 在CakePhp Docs中,它显示了一个示例,并且不需要它。 I took out this block of code: 我取出了这段代码:

$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']
                ];

and added a [] to my input name for file uploads like this: 并在我的输入名称中添加[]以进行文件上传,如下所示:

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

I was then able to grab all the info for each file. 这样,我便可以获取每个文件的所有信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM