Cakephp 2 загрузить несколько файлов с данными

I am trying to create a multiple file upload using cakephp 2. so please help. i new to cakephp as you can see my controller and view coding is wokking for single image.

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 '</pre>';
           // exit();

            if ($this->Portfolio->save($this->request->data)) {

                $this->Session->setFlash(__('The portfolio has been saved'), 'flash_success');

                $this->redirect(array('action' => 'index'));

            } else {

                $this->Session->setFlash(__('The portfolio could not be saved. Please, try again.'), 'flash_error');

            }

        } else {

            $this->Session->setFlash(__($error_message), 'flash_error');

        }

    }

    $talents = $this->Portfolio->Talent->find('list');


    $skills = $this->Portfolio->Skill->find('list', array(

        'order' => array('Skill.name ASC')

    ));

    $this->set(compact('talents', 'skills'));

} 

Вид -

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

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

сгенерированный массив-. с помощью 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
                        )

                )

        )

)

Вы получаете сообщение об ошибке при загрузке нескольких изображений или при сохранении данных? Вы хотите сохранить несколько имен изображений в одном столбце?

Sehdev 29.11.2018 12:55

этот код предназначен для разовой загрузки. и я хочу несколько загрузок с несколькими столбцами.

Ritesh shirsat 29.11.2018 13:49

Я пытаюсь использовать один элемент ввода файла для загрузки нескольких файлов. хотя средство выбора файлов позволяет выбрать несколько файлов и создать несколько массивов. но тогда как мне сохранить несколько массивов с помощью цикла foreach

Ritesh shirsat 03.12.2018 06:13

Пожалуйста, поделитесь своим окончательным массивом.

Sehdev 03.12.2018 08:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
253
2

Ответы 2

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

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

Я пытаюсь использовать один элемент ввода файла для загрузки нескольких файлов. хотя средство выбора файлов позволяет выбрать несколько файлов и создать несколько массивов. но тогда как мне сохранить несколько массивов с помощью цикла foreach

Ritesh shirsat 03.12.2018 06:12

Хорошо! Итак, вы получаете массив со всеми загруженными файлами? Вы можете опубликовать этот массив

q-jack 03.12.2018 08:25

Думаю, теперь я понимаю проблему. Вы хотите сохранить запрошенные данные, но ваши данные содержат массивы, которые не работают. Итак, вам нужно создать массив данных, который соответствует вашей структуре db. Здесь я не понимаю, почему у вас есть «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);
}

Другие вопросы по теме