1

プロジェクトで OneupUploaderBundle を使用してファイルをアップロードします。

私の質問は:

小枝テンプレートの UploadListener から response.msg をレンダリングするにはどうすればよいですか? 自分の反応をどのように評価できますか。

https://github.com/1up-lab/OneupUploaderBundle/blob/master/Resources/doc/response.md

//service.yml

acme.upload_listener:
    class: Acme\AcmeBundle\EventListener\UploadListener
    arguments: ["@doctrine.orm.entity_manager"]
    tags:
      - { name: kernel.event_listener, event: oneup_uploader.post_persist, method: onUpload }

//UploadListener.php

class UploadListener
{
    protected $em;

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

    public function onUpload(PostPersistEvent $event)
    {
        $file = $event->getFile();
        $session = $event->getRequest()->getSession();
        $session->set('file', $file->getPathName());

        $response = $event->getResponse();

        $response['msg'] = "File stored in session";

        => show response.msg in my twig-template. But how?
    }
} 

//JS (小枝テンプレート内)

$('#fileupload').fileupload({});

例が見つかりません...

ご協力いただきありがとうございます。

4

1 に答える 1

0

まあ、Twig テンプレートでこれを行うことはできません。Twig テンプレートはページの読み込み時にレンダリングされ、ファイルのアップロードは Ajax を使用して行われます。できることは、JavaScript で DOM を変更することです。

例えば:

$('#fileupload').fileupload({}).bind('fileuploaddone', function (e, data) {
    $("body").prepend('<p>File stored in session</p>');
});

一部のデータをクライアントに送り返すこともできます。

$('#fileupload').fileupload({}).bind('fileuploaddone', function (e, data) {
    if (data.result.filename != undefined) {
        $("body").prepend('<p>File ' + data.result.filename + ' stored in session</p>');
    }
});

ただし、それを行うには、oneup_uploader.post_persistリンク先のドキュメントで説明されているように、応答とともにファイル名を返すイベントのイベント リスナーを作成する必要があります。

<?php

namespace Foo\BarBundle\EventListener;

use Oneup\UploaderBundle\Event\PostPersistEvent;

class UploadListener
{
    public function onUpload(PostPersistEvent $event)
    {
        $request = $event->getRequest();
        $files = $request->files->get('files');
        $response = $event->getResponse();
        $filename = $files[0]->getClientOriginalName();
        $response['filename'] = $filename;
    }
}

services.yaml で:

# Event listener to handle uploaded files
foobar.upload_listener:
    class: Foo\BarBundle\EventListener\UploadListener
    tags:
        - { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onUpload }
于 2015-12-04T17:26:27.680 に答える