QR code – cakephp 4

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;
}