cakephp 2 загрузить несколько файлов с данными - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать загрузку нескольких файлов с помощью cakephp 2. Пожалуйста, помогите.Я новичок в CakePHP, поскольку вы можете видеть мой контроллер, и кодирование вида работает для одного изображения.

<code>public function admin_add() {
    if ($this->request->is('post')) {
        $this->Portfolio->create();
        $error_message = $this->Portfolio->checkFileSize($this->request->data);
        if( $error_message === true ) {
            $this->request->data['Portfolio'] = $this->Common->processMedia($this->request->data['Portfolio']);
           //echo '<pre>'; print_r($this->request->data); echo '
';// выход();if ($ this-> Portfolio-> save ($ this-> request-> data)) {$ this-> Session-> setFlash (__ ('Портфель был сохранен'), 'flash_success');$ this-> redirect (array ('action' => 'index'));} else {$ this-> Session-> setFlash (__ ('Портфель не может быть сохранен. Пожалуйста, попробуйте еще раз.'), 'flash_error');}} else {$ this-> Session-> setFlash (__ ($ error_message), 'flash_error');}} $ talents = $ this-> Portfolio-> Talent-> find ('list');$ skill = $ this-> Portfolio-> Skill-> find ('list', array ('order' => array ('Skill.name ASC')));$ this-> set (compact («таланты», «навыки»));}

Просмотр -

<input type="file" name="data[Portfolio][media_url_file][]" class=" validate[] m-wrap large" id="PortfolioMediaUrlFile" multiple>

Эта база данных структуры моей базы данных: - введите описание изображения здесь

genrated Array-.при использовании foreach не удалось сохранить этот массив в базе данных.

Array
(
    [Portfolio] => Array
        (
            [talent_id] => 435
            [title] => asas
            [status] => Approved
            [type_of_media] => picture
            [file] => Array
                (
                    [0] => Array
                        (
                            [name] => wi-logo.png
                            [type] => image/png
                            [tmp_name] => /tmp/phpn8ne7a
                            [error] => 0
                            [size] => 17457
                        )

                    [1] => Array
                        (
                            [name] => unnamed.png
                            [type] => image/png
                            [tmp_name] => /tmp/phpPcqpQw
                            [error] => 0
                            [size] => 14362
                        )

                )

            [media_url] => Array
                (
                    [0] => Array
                        (
                            [name] => wi-logo.png
                            [type] => image/png
                            [tmp_name] => /tmp/phpn8ne7a
                            [error] => 0
                            [size] => 17457
                        )

                    [1] => Array
                        (
                            [name] => unnamed.png
                            [type] => image/png
                            [tmp_name] => /tmp/phpPcqpQw
                            [error] => 0
                            [size] => 14362
                        )

                )

        )

)

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Мне кажется, я понимаю проблему сейчас.Вы хотите сохранить запрошенные данные, но ваши данные содержат массивы, которые не работают.Таким образом, вы должны создать массив данных, который соответствует вашей структуре БД.Здесь я не понимаю, почему у вас есть «file» и «mediaurl», которые содержат одинаковые данные.Но вот мое решение:

$this->Portfolio->create();
for($i = 0;$i < $this->request->data['Portfolio'][file];i++){
    $dataArray = [];
    //fill in your data which will be the same for each uploaded file
    $dataArray['talen_id'] = $this->request->data['Portfolio']['talen_id'];
    $dataArray['title'] = $this->request->data['Portfolio']['title'];
    $dataArray['status'] = $this->request->data['Portfolio']['status'];
    $dataArray['picture'] = $this->request->data['Portfolio']['picture'];
    //fill in your data which is different for each uploaded file
    $dataArray['media_url'] = $this->request->data['Portfolio']['media_url'][$i]['name'];
    $dataArray['file'] = $this->request->data['Portfolio']['file'][$i]['name'];
    //now you can save the data
    $this->Portfolio->save($dataArray);
}
0 голосов
/ 29 ноября 2018

Если он работает для одной загрузки, то он может быть расширен до нескольких.Почему бы не создать несколько полей ввода?Каждый файл имеет свой собственный ввод.присвойте каждому входу уникальное имя, и в контроллере вы можете обратиться к входу в цикле

$this->request->data['Portfolio1']
$this->request->data['Portfolio2']
$this->request->data['Portfolio3']
...
...