feat: add stub implementation for image
QRCodeFromEntity fix: base64 StubQRCodeGenerator
This commit is contained in:
parent
9e96c007bd
commit
64a07b232a
BIN
assets/images/wip.png
Normal file
BIN
assets/images/wip.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
@ -5,3 +5,7 @@ body {
|
||||
.header {
|
||||
background-color: skyblue;
|
||||
}
|
||||
|
||||
.header-another-code {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
@ -27,8 +27,13 @@ services:
|
||||
arguments:
|
||||
$available_currencies: '%app.currencies%'
|
||||
|
||||
App\Service\StubQRCodeGenerator:
|
||||
arguments:
|
||||
$imagePath: '%kernel.project_dir%/assets/images/wip.png'
|
||||
|
||||
App\Service\CurrencyListerInterface: '@App\Service\StaticCurrencyLister'
|
||||
App\Service\QRCodeQROptionsProviderInterface: '@App\Service\QRCodeQROptionsDefaultProvider'
|
||||
App\Service\QRCodeGeneratorInterface: '@App\Service\StubQRCodeGenerator'
|
||||
|
||||
# add more service definitions when explicit configuration is needed
|
||||
# please note that last definitions always *replace* previous ones
|
||||
|
@ -4,6 +4,7 @@ namespace App\Controller;
|
||||
|
||||
use App\Entity\QRCode\QRCode;
|
||||
use App\Form\Type\QRCodeType;
|
||||
use App\Service\QRCodeGeneratorInterface;
|
||||
use App\Service\QRCodeQROptionsProviderInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@ -11,14 +12,16 @@ use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
class IndexController extends AbstractController {
|
||||
|
||||
public function __construct(private readonly QRCodeQROptionsProviderInterface $qrCodeQROptionsFactory) {}
|
||||
#[Route('/', name: 'homepage')]
|
||||
public function indexAction(Request $request, QRCodeQROptionsProviderInterface $qrCodeQROptionsFactory): Response
|
||||
public function indexAction(
|
||||
Request $request,
|
||||
QRCodeGeneratorInterface $qrCodeGenerator,
|
||||
): Response
|
||||
{
|
||||
$qrCode = new QRCode(
|
||||
codeQROptions: $qrCodeQROptionsFactory->getDefault()
|
||||
);
|
||||
$qrCodeImage = null;
|
||||
|
||||
$qrCode = $this->createQrCodeEntity();
|
||||
$form = $this->createForm(QRCodeType::class, $qrCode);
|
||||
|
||||
|
||||
@ -26,13 +29,24 @@ class IndexController extends AbstractController {
|
||||
$form->submit($request->request->all($form->getName()));
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
// TODO: call service to generate
|
||||
print_r($qrCode);
|
||||
/* Puvodne jsem premyslel nad redirectem a ulozenim obrazku
|
||||
do session, nicmene u takovehleho typu aplikace me to prijde naopak kontraproduktivni.
|
||||
a zadani o tom mlci. Navic v pripade ze aplikace bude provozovana ve vice instancich
|
||||
by se musela resit memcache, redis... */
|
||||
$qrCodeImage = $qrCodeGenerator->generateQRCodeFromEntity($qrCode);
|
||||
$form = $this->createForm(QRCodeType::class, $this->createQrCodeEntity());
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render('index/homepage.html.twig', [
|
||||
'form' => $form
|
||||
'form' => $form,
|
||||
'qrCodeImage' => $qrCodeImage
|
||||
]);
|
||||
}
|
||||
|
||||
private function createQrCodeEntity(): QRCode {
|
||||
return new QRCode(
|
||||
codeQROptions: $this->qrCodeQROptionsFactory->getDefault()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
16
src/Service/QRCodeGeneratorInterface.php
Normal file
16
src/Service/QRCodeGeneratorInterface.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use App\Entity\QRCode\QRCode;
|
||||
|
||||
interface QRCodeGeneratorInterface
|
||||
{
|
||||
/**
|
||||
* Generates QR code from entity
|
||||
* @param QRCode $entity
|
||||
* @return string base64 encoded PNG
|
||||
*/
|
||||
public function generateQRCodeFromEntity(QRCode $entity): string;
|
||||
}
|
21
src/Service/StubQRCodeGenerator.php
Normal file
21
src/Service/StubQRCodeGenerator.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use App\Entity\QRCode\QRCode;
|
||||
|
||||
readonly final class StubQRCodeGenerator implements QRCodeGeneratorInterface
|
||||
{
|
||||
public function __construct(private string $imagePath) {}
|
||||
|
||||
public function generateQRCodeFromEntity(QRCode $entity): string
|
||||
{
|
||||
$content = file_get_contents($this->imagePath);
|
||||
|
||||
return match ($content) {
|
||||
false => throw new \InvalidArgumentException('Image path is invalid'),
|
||||
default => base64_encode($content)
|
||||
};
|
||||
}
|
||||
}
|
@ -2,6 +2,12 @@
|
||||
|
||||
{% block body %}
|
||||
<div class="container">
|
||||
{% if qrCodeImage %}
|
||||
<div class="d-flex p-3 justify-content-center qr-code-image">
|
||||
<img src="data:image/png;base64,{{ qrCodeImage }}" alt="QR code" />
|
||||
</div>
|
||||
<h2 class="header-another-code">{{ "You can generate another QR code here" | trans }}:</h2>
|
||||
{% endif %}
|
||||
{{ form_start(form) }}
|
||||
<div class="mb-3 col-auto">
|
||||
{{ form_label(form.iban) }}
|
||||
|
@ -8,3 +8,4 @@ Specific symbol: "Specifický symbol"
|
||||
Generate qr code: "Vygenerovat QR kód"
|
||||
Iban: "IBAN"
|
||||
QR code generator: "Generátor bankovních QR kódů"
|
||||
You can generate another QR code here: "Další QR kód si můžete vygenerovat zde"
|
||||
|
Loading…
Reference in New Issue
Block a user