Файл не загружается при использовании плагина xety/cake3-upload

Я не могу загрузить файл из одной папки в другую в CakePHP. Вот мой код.

Сначала я загрузил плагин и добавил этот код в ProductsTable.php

$this->addBehavior('Xety/Cake3Upload.Upload', [
    'fields' => [
        'productimg_file' => [
            'path' => 'uploads/avatar/:id/:md5'
        ]
    ]
]);

затем я добавил в свой add.cpt

<?php
    echo $this->Form->input('productcode');
    echo $this->Form->input('productname');
    echo $this->Form->input('productprice');
    echo $this->Form->input('quantity');
    echo $this->Form->input('productdesc');
    echo $this->Form->input('productimg_file',['type' => 'file']);
?>

Тем не менее файл не перемещается в каталог webroot.

введите код здесь public function add() {

    $product = $this->Products->newEntity();


    if ($this->request->is('post')) {

    $product = $this->Products->patchEntity($product, $this->request->data);

        if ($this->Products->save($product)) {
           $this->Flash->success(__('The product has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
           $this->Flash->error(__('The product could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('product'));
    $this->set('_serialize', ['product']);
}

person ankit12    schedule 12.12.2015    source источник
comment
Выдает какие-то ошибки? Пожалуйста, отредактируйте свой вопрос и добавьте свое действие ProductsController::add() и любой другой соответствующий код.   -  person Inigo Flores    schedule 13.12.2015


Ответы (3)


Я успешно загрузил этот плагин. Сначала я был твоей ошибкой, но я ее исправил. Вот мои шаги...

Внутри: CakePHP 3.2 Red Velvet

  1. Скачать исходный код Скопируйте UploadBehavior.php в /src/Model/Behavior

  2. Скопируйте "xety/cake3-upload": "1.*" (с двойной кавычкой "") вставьте в /config/bootstrap.php в "require-dev": {...},

Ex:

"require-dev": {
        "psy/psysh": "@stable",
        "cakephp/debug_kit": "~3.2",
        "cakephp/bake": "~1.1",
        "xety/cake3-upload": "1.*"
    },
  1. открытый терминал (окно cmd) типа:

    обновление композитора

Примечание: если у вас нет композитора, погуглите и установите его.

=> Я знал, что номер 1 и номер 2 одинаковы, но я сделал это точно.

  1. Конфигурация как руководство по плагину. Эта конфигурация ниже была в Model/Table/model_nameTable.php НЕ Model/Entity/model.php

Ex:

$this->addBehavior('Xety/Cake3Upload.Upload', [
        'fields' => [
            'avatar' => [
                'path' => '/img/avatars/:id/:md5'
                    ]
                ]
            ]
        );
  1. Установите URL-адрес обновления с помощью

    '/img/имя_папки/:id/:md5'

Ex:

'/img/avatars/:id/:md5'
  1. Убедитесь, что FORM в представлении определяется как:

    $this->Form->create($user, ['enctype' => 'multipart/form-data'])

и входной файл был правильным именем:

$this->Form->file('fieldname_file');

Ex:

$this->Form->file('avatar_file');

Не нужно ничего вызывать из контроллера, когда вы отправляете форму, она будет загружена автоматически.

Удачи !

person TommyDo    schedule 21.06.2016

Ваше мнение кажется неполным. $this->Form->create() нет.

В инструкциях к плагину упоминается, что вы должны настроить форму для приема файлов:

$this->Form->create($foo, ['type'=>'file']);
// .. or ..
$this->Form->create($foo, ['enctype' => 'multipart/form-data']);

Загрузки по умолчанию хранятся в папке /app/webroot/img/. Убедитесь, что эта папка доступна для записи Apache или Nginx.

person Inigo Flores    schedule 12.12.2015
comment
да, есть $this-›Form-›создайте его, просто я не поместил его здесь..и также у папки моего приложения есть все разрешения - person ankit12; 13.12.2015

_file — это суффикс по умолчанию, который вы будете использовать только в файле .ctp. Не в модели. Измените свое поведение в модели. Надеюсь, это поможет.

$this->addBehavior('Xety/Cake3Upload.Upload', [
    'fields' => [
        'productimg' => [
            'path' => 'uploads/avatar/:id/:md5'
        ]
    ]
]);
person B. I. Sadi    schedule 05.07.2017