Symfony 3.1 и OneUpUploaderBundle + Plupload = UploadListener не вызывается

ПОЯСНЕНИЯ

Этот вопрос отличается от аналогичного вопроса тем, что я использую другую библиотеку загрузки (Plupload в этом вопросе по сравнению с FineUploader в аналогичном вопросе).

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

ВСТУПЛЕНИЕ

Три недели назад я создал похожий вопрос о загрузке с помощью OneupUploaderBundle, но с библиотекой FineUploader. К сожалению, пока нет ответов. В то же время я попытался настроить другую библиотеку загрузки (Blueimp).

Неделю назад я создал похожий вопрос о загрузке с помощью OneupUploaderBundle, но с библиотекой BlueQ jQuery uplaod. К сожалению, пока нет ответов. Тем временем я попытался настроить другую библиотеку загрузки (Plupload).

Я развиваюсь на Windows 10 Pro с XAMPP [1] который включает PHP v7.0.8,

Я использую Symfony v3.1.2, OneupUploaderBundle и библиотеку Plupload для загрузки файлов на сервер.

При настройке я следовал документации OneUpUploaderBundle [2] и Plupload загрузить библиотеку [3], [4].

ПРОБЛЕМА

Я хочу загрузить файлы в какой-либо каталог, а затем проверить их тип MIME и проверить, разрешен ли тип файла MIME для загрузки, а после этого - переместить их в пользовательский каталог (который может меняться от файла к файлу), наконец, я хочу сохранить путь к файлу и имя файла для базы данных.

Загрузка файлов работает нормально, и файлы загружаются в oneup_uploader_endpoint('gallery'), Даже пользовательский файл Namer работает и позволяет загружать в пользовательский каталог.

Однако слушатели не вызываются и отображаются в разделе "События Symfony Profiler". Not Called Listeners!

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

КОД

мой services.yml

services:
    app.upload_listener:
        class: AppBundle\EventListener\UploadListener
        arguments: ["@doctrine.orm.entity_manager"]
        tags:
            - { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onPostUpload }
            - { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onUpload }

    app.upload_unique_namer:
        class: AppBundle\Uploader\Naming\UploadUniqueNamer
        arguments: ["@session"]

мой пользовательский Namer

<?php

namespace AppBundle\Uploader\Naming;

use Oneup\UploaderBundle\Uploader\File\FileInterface;
use Oneup\UploaderBundle\Uploader\Naming\NamerInterface;
use Symfony\Component\HttpFoundation\Session\Session;

class UploadUniqueNamer implements NamerInterface
{
    private $session;

    public function __construct(Session $session)
    {
        $this->session = $session;
    }

    /**
     * Creates a user directory name for the file being uploaded.
     *
     * @param FileInterface $file
     * @return string The directory name.
     */
    public function name(FileInterface $file)
    {
        $upload_files_path = $this->session->get('upload_files_path');
        $unique_name = uniqid();

        return sprintf('%s/%s_%s',
            $upload_files_path,
            $unique_name,
            $file->getClientOriginalName()
        );
    }
}

мой config.yml

oneup_uploader:
    mappings:
        gallery:
            frontend: plupload
            enable_progress: true
            namer: app.upload_unique_namer
            use_orphanage: false
            allowed_mimetypes: [image/png, image/jpg, image/jpeg, image/gif]
            max_size: 200M

мой слушатель загрузки:

<?php

namespace AppBundle\EventListener;

use Oneup\UploaderBundle\Event\PreUploadEvent;
use Oneup\UploaderBundle\Event\PostUploadEvent;
use Oneup\UploaderBundle\Event\PostPersistEvent;
use Doctrine\ORM\EntityManager;
use AppBundle\Entity\Product;

class UploadListener
{
    /**
     * @var EntityManager
     */
    private $entityManager;

    //protected $originalName;

    public function __construct(EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function onUpload(PostPersistEvent $event)
    {
        $file = $event->getFile();
        $this->originalName = $file->getClientOriginalName();
        var_dump('In -- OnUpload');
        die();
    }

    public function onPostUpload(PostPersistEvent $event)
    {
        $file = $event->getFile();

        $object = new Product();
        $object->setName($file->getClientOriginalName());
        //$object->setName($file->getPathName());

        $this->entityManager->persist($object);
        $this->entityManager->flush();
        var_dump('In -- OnPostUpload');
        die();
    }
}

upload.html.twig

{% extends 'base.html.twig' %}

{% block stylesheets %}
    {{ parent() }}
    <link type="text/css" rel="stylesheet" href="{{ asset('js/jquery-ui-1.12.0/jquery-ui.css') }}" />
    <link type="text/css" rel="stylesheet" href="{{ asset('js/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css') }}" media="screen" />
{% endblock %}

{% block content %}
    <div id="box-upload">
        <div id="uploader">
            <p>Your browser doesn't have HTML5 support.</p>
        </div>
    </div>
{% endblock %}

{% block javascripts %}
    <script type="text/javascript" src="{{ asset('js/jquery-2.2.4.js') }}"></script>
    <script type="text/javascript" src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"></script>
    <script type="text/javascript" src="{{ asset('js/jquery-ui-1.12.0/jquery-ui.js') }}"></script>
    <script type="text/javascript" src="{{ asset('js/plupload/plupload.full.min.js') }}"></script>
    <script type="text/javascript" src="{{ asset('js/plupload/jquery.ui.plupload/jquery.ui.plupload.js') }}"></script>
    <script type="text/javascript">
        $(function()
        {
            $("#uploader").plupload(
            {
                // General settings
                runtimes : 'html5',
                url: "{{ oneup_uploader_endpoint('gallery') }}",
                multi_selection: false,

                // Maximum file size
                max_file_size: '10mb',

                chunk_size: '1mb',

                // Resize images on clientside if we can
                resize: {
                    width: 200,
                    height: 200,
                    quality: 90,
                    crop: true // crop to exact dimensions
                },

                // Specify what files to browse for
                filters: [
                    {title: "Image files", extensions : "jpg,jpeg,png,gif"},
                    {title: "Zip files", extensions : "zip,avi"}
                ],

                // Rename files by clicking on their titles
                rename: true,

                // Sort files
                sortable: true,

                // Enable ability to drag'n'drop files onto the widget (currently only HTML5 supports that)
                dragdrop: true,

                // Views to activate
                views: {
                    list: true,
                    thumbs: false, // Show thumbs
                    active: 'list'
                },

                // Flash settings
                flash_swf_url: '/plupload/js/Moxie.swf',

                // Silverlight settings
                silverlight_xap_url: '/plupload/js/Moxie.xap'

            });
        });
    </script>
{% endblock %}

ОБНОВЛЕНИЕ

  1. пока нет

ЗАКЛЮЧЕНИЕ

Пожалуйста, порекомендуйте.

Спасибо за ваше время и знания.

1 ответ

Решение

Данная проблема была вызвана неверной конфигурацией event listeners в services.yml, Вот рабочая конфигурация.

мой services.yml

services:
    app.upload_listener:
        class: AppBundle\EventListener\UploadListener
        arguments: ["@doctrine.orm.entity_manager"]
        tags:
            - { name: kernel.event_listener, event: oneup_uploader.post_persist.gallery, method: onPostUpload }
            - { name: kernel.event_listener, event: oneup_uploader.post_persist.gallery, method: onUpload }

    app.upload_unique_namer:
        class: AppBundle\Uploader\Naming\UploadUniqueNamer
        arguments: ["@session"]
Другие вопросы по тегам