Skip to content

Commit 7ea3fbb

Browse files
Lustmoredweaverryan
authored andcommitted
Add extremely simple upload files example
1 parent ad70f81 commit 7ea3fbb

File tree

5 files changed

+83
-0
lines changed

5 files changed

+83
-0
lines changed

ux.symfony.com/src/Controller/LiveComponentDemoController.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,12 @@ public function productForm(LiveDemoRepository $liveDemoRepository): Response
108108
'demo' => $liveDemoRepository->find('product_form'),
109109
]);
110110
}
111+
112+
#[Route('/upload', name: 'app_live_components_upload')]
113+
public function uploadFiles(LiveDemoRepository $liveDemoRepository): Response
114+
{
115+
return $this->render('live_component_demo/upload.html.twig', parameters: [
116+
'demo' => $liveDemoRepository->find('upload'),
117+
]);
118+
}
111119
}

ux.symfony.com/src/Service/LiveDemoRepository.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ public function findAll(): array
9898
route: 'app_live_components_product_form',
9999
longDescription: <<<EOF
100100
Open a child modal component to create a new Category.
101+
EOF
102+
),
103+
new LiveDemo(
104+
'upload',
105+
name: 'Uploading files',
106+
description: 'Upload files to live component.',
107+
route: 'app_live_components_upload',
108+
longDescription: <<<EOF
109+
Send files to be handled by live component.
101110
EOF
102111
),
103112
];
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Twig;
6+
7+
use Symfony\Component\HttpFoundation\File\UploadedFile;
8+
use Symfony\Component\HttpFoundation\Request;
9+
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
10+
use Symfony\UX\LiveComponent\Attribute\LiveAction;
11+
use Symfony\UX\LiveComponent\DefaultActionTrait;
12+
13+
#[AsLiveComponent()]
14+
class UploadFiles
15+
{
16+
use DefaultActionTrait;
17+
18+
public ?UploadedFile $single = null;
19+
public array $multiple = [];
20+
21+
#[LiveAction]
22+
public function sendFiles(Request $request): void
23+
{
24+
$this->single = $request->files->get('single');
25+
$this->multiple = $request->files->all('multiple');
26+
}
27+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<div
2+
{{ attributes }}
3+
>
4+
<p><strong>Note:</strong> files aren't persisted and will be lost on each rerender if not stored.</p>
5+
<p>
6+
Single file: <input type="file" name="single" autocomplete="off" /> <br>
7+
Current file:
8+
{% if single %}
9+
{{ single.clientOriginalName }} ({{ single.clientMimeType }})
10+
{% else %}
11+
none
12+
{% endif %}
13+
</p>
14+
<div>
15+
Multiple files: <input type="file" name="multiple[]" autocomplete="off" multiple /> <br>
16+
Current files:
17+
<ul>
18+
{% for file in multiple %}
19+
<li>{{ file.clientOriginalName }} ({{ file.clientMimeType }})</li>
20+
{% else %}
21+
<li>none</li>
22+
{% endfor %}
23+
</ul>
24+
</div>
25+
<button data-action="live#action" data-action-name="files|sendFiles">Send files!</button>
26+
</div>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{% extends 'liveDemoBase.html.twig' %}
2+
3+
{% block code_block_left %}
4+
<twig:CodeBlock filename="src/Twig/UploadFiles.php" height="400px" />
5+
{% endblock %}
6+
7+
{% block code_block_right %}
8+
<twig:CodeBlock filename="templates/components/UploadFiles.html.twig" height="400px" />
9+
{% endblock %}
10+
11+
{% block demo_content %}
12+
{{ component('UploadFiles') }}
13+
{% endblock %}

0 commit comments

Comments
 (0)