Integracja QR code z cakephp 4
Źródło: https://sourceforge.net/projects/phpqrcode/
1. Zmiana pakietu – wszystkie klasy należy zapisać w osobnych plikach w formacie CamelCase.
2. Wgrać pakiet do projektu:
-
- nowy katalog – ../vendor/phpqrcode/phpqrcode/src
- uprawnienia src www-data.www-data, 770
- cache/ – 770
- error.txt 770
# ls src/ FrameFiller.php QRbitstream.php QRencode.php qrlib.php QRrsItem.php QRstr.php cache index.php QRcode.php QRimage.php QRmask.php QRrs.php QRtools.php qrconfig.php QRinputItem.php QRrawcode.php QRspec.php errors.txt qrconst.php QRinput.php QRrsblock.php QRsplit.php
# nano composer.json "autoload": { "psr-4": { "App\\": "src/", "PhpQrcode\\": "vendor/phpqrcode/phpqrcode/src/" } }, # composer dump-autoload -o
Miejsce na pliki wygenerowanych obrazków qrcode np.
drwxrwx--- 2 www-data www-data 4096 Mar 4 18:33 qrcodes/
# ls qrcodes/
24B2DC5.png 594AD7A.png index.html
Kontroler
use App\Controller\AppController;
use PhpQrcode\QRcode;
PATH - fizyczna ścieżka gdzie są zapisywane obrazki
define('PNG_TEMP_DIR', WWW_ROOT . DS . 'qrcodes'. DS);
public function showQrCode() { $PNG_TEMP_DIR = PNG_TEMP_DIR ; // ścieżka fizyczna src/webroot/qrcodes/ $PNG_WEB_DIR = '/qrcodes/'; // ścieżka względna dla img $id = '3780'; $uuid = '3049ADW'; $url = "https://myproject.pl/api/info/".$id."/".$uuid; $filename = $uuid.'.png'; $filepath = $PNG_TEMP_DIR . $filename; $imgpath = $PNG_WEB_DIR . $filename; include "/var/www/html/myproject/vendor/phpqrcode/phpqrcode/src/qrlib.php"; if(!file_exists($filepath)) { QRcode::png($url, $filepath, 'M', 6, 2); } echo '<img src="'.$imgpath.'" alt="qrcode"><br>'; echo $url; exit; }