برنامه نویسی

نحوه پیاده سازی تولید کد QR در لاراول

Summarize this content to 400 words in Persian Lang
کدهای QR ابزاری کاربردی برای به اشتراک گذاری داده ها هستند و پیاده سازی آنها در برنامه لاراول می تواند ساده و مقیاس پذیر باشد. این پست وبلاگ شما را در ساخت یک سیستم تولید کد QR با استفاده از آن راهنمایی می کند قراردادها، صفات، و کلاس های اقدام.

قبل از اینکه وارد کد شویم، بیایید بسته ها و وابستگی های لازم را نصب کنیم.

مرحله 1: بسته SimpleSoftwareIO QR Code را نصب کنید

برای تولید کدهای QR در لاراول، از بسته SimpleSoftwareIO QR Code استفاده می کنیم. این یک API با کاربری آسان برای ایجاد کدهای QR در قالب‌های مختلف مانند PNG، SVG و موارد دیگر ارائه می‌کند.

برای نصب پکیج دستور زیر را اجرا کنید:

composer require simplesoftwareio/simple-qrcode

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از نصب، می توانید از آن استفاده کنید QrCode نما برای تولید کدهای QR در برنامه شما.

مرحله 2: Imagick را برای فرمت PNG نصب کنید

اگر در حال تولید کدهای QR هستید PNG فرمت (همانطور که در این مثال داریم)، ​​توصیه می شود که آن را نصب کنید ایمجیک پسوند. Imagick از پردازش تصویر پشتیبانی می کند و بسته SimpleSoftwareIO QR Code برای ایجاد و دستکاری فایل های PNG به آن متکی است.

برای نصب Imagick بر روی سیستم خود، مراحل زیر را دنبال کنید:

برای اوبونتو:

sudo apt-get install php-imagick

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای macOS (با استفاده از Homebrew):

brew install imagemagick
brew install php@8.3-imagick # or php@your-version-imagick

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از نصب، اطمینان حاصل کنید که imagick پسوند در شما فعال است php.ini فایل

برای محیط های PHP، ممکن است لازم باشد سرور را مجددا راه اندازی کنید تا تغییرات را منعکس کند:

php artisan serve

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا که پکیج و ایمجیک راه اندازی شد، بیایید پیاده سازی را ادامه دهیم.

مرحله 3: قرارداد QR Code را تعریف کنید

ما با تعریف قرارداد (رابط) شروع می کنیم که روش های مورد نیاز برای تولید یک کد QR را اعمال می کند. این قرارداد تضمین می‌کند که هر مدلی که آن را پیاده‌سازی می‌کند، عملکرد لازم برای مدیریت تولید کد QR را خواهد داشت.

namespace App\Contracts;

interface QrCode
{
public function generateQrCode(): self;

public function getQrCodeColumnName(): string;

public function getQrCodeIdentifier(): string;

public function getQrCodeFormat(): string;

public function getQrCodeSize(): string;

public function getQrCodeLogo(): string;

public function getQrCodePath(): string;

public function getQrCodeContent(): string;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این رابط تمام روش های مربوط به ایجاد کد QR، از تعیین فرمت و اندازه کد QR تا ارائه محتوا و مسیر فایل را تعریف می کند.

مرحله 4: ویژگی تعامل کد QR را اجرا کنید

اکنون، ما یک ویژگی برای پیاده سازی منطقی ایجاد می کنیم که با کلاس اقدام تولید کد QR در تعامل است.

namespace App\Concerns;

use App\Actions\Qr\GenerateQrCode;
use App\Contracts\QrCode;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;

trait InteractsWithQrCode
{
public static function bootInteractsWithQrCode()
{
static::creating(function (Model $model) {
if ($model instanceof QrCode) {
$model->generateQrCode();
}
});
}

public function generateQrCode(bool $force = false): self
{
$generator = new GenerateQrCode(
$this->getQrCodeContent(),
$this->getQrCodePath(),
$this->getQrCodeFormat(),
$this->getQrCodeSize(),
$this->getQrCodeLogo(),
$force
);
$generator->execute();

if ($this instanceof HasMedia) {
$this->copyMedia($this->getQrCodePath())->toMediaCollection(‘qr-code’);
}

return $this;
}

public function getQrCodeColumnName(): string
{
return isset($this->qr_code) ? $this->qr_code : ‘qr_code’;
}

public function getQrCodeIdentifier(): string
{
return isset($this->qr_code_identifier) ? $this->qr_code_identifier : ‘uuid’;
}

public function getQrCodeFormat(): string
{
return isset($this->qr_code_format) ? $this->qr_code_format : ‘png’;
}

public function getQrCodeSize(): string
{
return isset($this->qr_code_size) ? $this->qr_code_size : ‘256’;
}

public function getQrCodeLogo(): string
{
return file_exists(public_path(‘assets/logo.png’)) ? public_path(‘assets/logo.png’) : ”;
}

public function getQrCodePath(): string
{
return storage_path(
‘/data/qr-codes/’.
$this->{$this->getQrCodeIdentifier()}.
‘.’.
$this->getQrCodeFormat()
);
}

public function getQrCodeContent(): string
{
return data_get($this, $this->getQrCodeColumnName(), ”);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این ویژگی فرآیند تولید کد QR را کنترل می‌کند و به آن می‌گوید GenerateQrCode اقدام و ذخیره کد تولید شده

مرحله 5: کلاس اکشن برای تولید کدهای QR ایجاد کنید

ما منطق تولید کد QR را در یک کلاس عمل کپسوله می کنیم. این کلاس کد QR را در مسیر مشخص شده تولید و ذخیره می کند.

namespace App\Actions\Qr;

use CleaniqueCoders\LaravelContract\Contracts\Execute;
use SimpleSoftwareIO\QrCode\Facades\QrCode;

class GenerateQrCode implements Execute
{
public function __construct(
protected string $content,
protected string $path,
protected string $format = ‘png’,
protected string $size = ‘256’,
protected string $logo = ”,
protected bool $force = false) {}

public function execute()
{
try {
$path = $this->path;

$content = $this->content;

if (file_exists($path) && ! $this->force) {
return;
}

if ($this->force && file_exists($path)) {
unlink($path);
}

$qrCode = QrCode::format($this->format)
->size($this->size)
->eye(‘square’)
->margin(5)
->style(‘dot’, 0.9);

if ($this->logo) {
$qrCode->merge($this->logo, .25, true);
}

file_put_contents(
$this->path, $qrCode->generate($content)
);
} catch (\Throwable $th) {
throw $th;
}
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کلاس اکشن از SimpleSoftwareIO استفاده می کند QrCode نما برای تولید یک کد QR با فرمت، اندازه و محتوای مشخص شده. همچنین به شما امکان می دهد به صورت اختیاری یک لوگو اضافه کنید و کدهای QR موجود را بازنویسی کنید.

مرحله 6: از قرارداد و صفت در یک مدل استفاده کنید

در نهایت، ادغام کنید QrCode قرارداد و InteractsWithQrCode ویژگی در مدلی که به تولید کد QR نیاز دارد، مانند یک Asset مدل

namespace App\Models;

use App\Concerns\InteractsWithQrCode;
use App\Contracts\QrCode;
use App\Models\Base as Model;

class Asset extends Model implements QrCode
{
use InteractsWithQrCode;

public function getQrCodeContent(): string
{
return route(‘assets.qr’, $this->{$this->getRouteKeyName()});
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، Asset مدل یک کد QR حاوی یک URL برای دسترسی به دارایی تولید می کند و کد QR زمانی ایجاد می شود که یک دارایی جدید ایجاد شود.

نتیجه گیری

این پیاده سازی با ترکیب قراردادها، ویژگی ها و کلاس های عمل، راه حلی مقیاس پذیر و قابل نگهداری برای تولید کد QR در لاراول ارائه می کند. با کمک بسته SimpleSoftwareIO QR Code و Imagick برای مدیریت تصویر، می توانید به راحتی این تنظیمات را برای هر نیاز تولید کد QR سفارشی کرده و گسترش دهید.

فراموش نکنید که وابستگی های لازم را نصب کنید و اطمینان حاصل کنید که پسوند Imagick برای پشتیبانی از فرمت PNG فعال است. کد نویسی مبارک!

کدهای QR ابزاری کاربردی برای به اشتراک گذاری داده ها هستند و پیاده سازی آنها در برنامه لاراول می تواند ساده و مقیاس پذیر باشد. این پست وبلاگ شما را در ساخت یک سیستم تولید کد QR با استفاده از آن راهنمایی می کند قراردادها، صفات، و کلاس های اقدام.

قبل از اینکه وارد کد شویم، بیایید بسته ها و وابستگی های لازم را نصب کنیم.

مرحله 1: بسته SimpleSoftwareIO QR Code را نصب کنید

برای تولید کدهای QR در لاراول، از بسته SimpleSoftwareIO QR Code استفاده می کنیم. این یک API با کاربری آسان برای ایجاد کدهای QR در قالب‌های مختلف مانند PNG، SVG و موارد دیگر ارائه می‌کند.

برای نصب پکیج دستور زیر را اجرا کنید:

composer require simplesoftwareio/simple-qrcode
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از نصب، می توانید از آن استفاده کنید QrCode نما برای تولید کدهای QR در برنامه شما.

مرحله 2: Imagick را برای فرمت PNG نصب کنید

اگر در حال تولید کدهای QR هستید PNG فرمت (همانطور که در این مثال داریم)، ​​توصیه می شود که آن را نصب کنید ایمجیک پسوند. Imagick از پردازش تصویر پشتیبانی می کند و بسته SimpleSoftwareIO QR Code برای ایجاد و دستکاری فایل های PNG به آن متکی است.

برای نصب Imagick بر روی سیستم خود، مراحل زیر را دنبال کنید:

برای اوبونتو:

sudo apt-get install php-imagick
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای macOS (با استفاده از Homebrew):

brew install imagemagick
brew install php@8.3-imagick # or php@your-version-imagick
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از نصب، اطمینان حاصل کنید که imagick پسوند در شما فعال است php.ini فایل

برای محیط های PHP، ممکن است لازم باشد سرور را مجددا راه اندازی کنید تا تغییرات را منعکس کند:

php artisan serve
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا که پکیج و ایمجیک راه اندازی شد، بیایید پیاده سازی را ادامه دهیم.


مرحله 3: قرارداد QR Code را تعریف کنید

ما با تعریف قرارداد (رابط) شروع می کنیم که روش های مورد نیاز برای تولید یک کد QR را اعمال می کند. این قرارداد تضمین می‌کند که هر مدلی که آن را پیاده‌سازی می‌کند، عملکرد لازم برای مدیریت تولید کد QR را خواهد داشت.

namespace App\Contracts;

interface QrCode
{
    public function generateQrCode(): self;

    public function getQrCodeColumnName(): string;

    public function getQrCodeIdentifier(): string;

    public function getQrCodeFormat(): string;

    public function getQrCodeSize(): string;

    public function getQrCodeLogo(): string;

    public function getQrCodePath(): string;

    public function getQrCodeContent(): string;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این رابط تمام روش های مربوط به ایجاد کد QR، از تعیین فرمت و اندازه کد QR تا ارائه محتوا و مسیر فایل را تعریف می کند.


مرحله 4: ویژگی تعامل کد QR را اجرا کنید

اکنون، ما یک ویژگی برای پیاده سازی منطقی ایجاد می کنیم که با کلاس اقدام تولید کد QR در تعامل است.

namespace App\Concerns;

use App\Actions\Qr\GenerateQrCode;
use App\Contracts\QrCode;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;

trait InteractsWithQrCode
{
    public static function bootInteractsWithQrCode()
    {
        static::creating(function (Model $model) {
            if ($model instanceof QrCode) {
                $model->generateQrCode();
            }
        });
    }

    public function generateQrCode(bool $force = false): self
    {
        $generator = new GenerateQrCode(
            $this->getQrCodeContent(),
            $this->getQrCodePath(),
            $this->getQrCodeFormat(),
            $this->getQrCodeSize(),
            $this->getQrCodeLogo(),
            $force
        );
        $generator->execute();

        if ($this instanceof HasMedia) {
            $this->copyMedia($this->getQrCodePath())->toMediaCollection('qr-code');
        }

        return $this;
    }

    public function getQrCodeColumnName(): string
    {
        return isset($this->qr_code) ? $this->qr_code : 'qr_code';
    }

    public function getQrCodeIdentifier(): string
    {
        return isset($this->qr_code_identifier) ? $this->qr_code_identifier : 'uuid';
    }

    public function getQrCodeFormat(): string
    {
        return isset($this->qr_code_format) ? $this->qr_code_format : 'png';
    }

    public function getQrCodeSize(): string
    {
        return isset($this->qr_code_size) ? $this->qr_code_size : '256';
    }

    public function getQrCodeLogo(): string
    {
        return file_exists(public_path('assets/logo.png')) ? public_path('assets/logo.png') : '';
    }

    public function getQrCodePath(): string
    {
        return storage_path(
            '/data/qr-codes/'.
            $this->{$this->getQrCodeIdentifier()}.
            '.'.
            $this->getQrCodeFormat()
        );
    }

    public function getQrCodeContent(): string
    {
        return data_get($this, $this->getQrCodeColumnName(), '');
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این ویژگی فرآیند تولید کد QR را کنترل می‌کند و به آن می‌گوید GenerateQrCode اقدام و ذخیره کد تولید شده


مرحله 5: کلاس اکشن برای تولید کدهای QR ایجاد کنید

ما منطق تولید کد QR را در یک کلاس عمل کپسوله می کنیم. این کلاس کد QR را در مسیر مشخص شده تولید و ذخیره می کند.

namespace App\Actions\Qr;

use CleaniqueCoders\LaravelContract\Contracts\Execute;
use SimpleSoftwareIO\QrCode\Facades\QrCode;

class GenerateQrCode implements Execute
{
    public function __construct(
        protected string $content,
        protected string $path,
        protected string $format = 'png',
        protected string $size = '256',
        protected string $logo = '',
        protected bool $force = false) {}

    public function execute()
    {
        try {
            $path = $this->path;

            $content = $this->content;

            if (file_exists($path) && ! $this->force) {
                return;
            }

            if ($this->force && file_exists($path)) {
                unlink($path);
            }

            $qrCode = QrCode::format($this->format)
                ->size($this->size)
                ->eye('square')
                ->margin(5)
                ->style('dot', 0.9);

            if ($this->logo) {
                $qrCode->merge($this->logo, .25, true);
            }

            file_put_contents(
                $this->path, $qrCode->generate($content)
            );
        } catch (\Throwable $th) {
            throw $th;
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این کلاس اکشن از SimpleSoftwareIO استفاده می کند QrCode نما برای تولید یک کد QR با فرمت، اندازه و محتوای مشخص شده. همچنین به شما امکان می دهد به صورت اختیاری یک لوگو اضافه کنید و کدهای QR موجود را بازنویسی کنید.


مرحله 6: از قرارداد و صفت در یک مدل استفاده کنید

در نهایت، ادغام کنید QrCode قرارداد و InteractsWithQrCode ویژگی در مدلی که به تولید کد QR نیاز دارد، مانند یک Asset مدل

namespace App\Models;

use App\Concerns\InteractsWithQrCode;
use App\Contracts\QrCode;
use App\Models\Base as Model;

class Asset extends Model implements QrCode
{
    use InteractsWithQrCode;

    public function getQrCodeContent(): string
    {
        return route('assets.qr', $this->{$this->getRouteKeyName()});
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، Asset مدل یک کد QR حاوی یک URL برای دسترسی به دارایی تولید می کند و کد QR زمانی ایجاد می شود که یک دارایی جدید ایجاد شود.


نتیجه گیری

این پیاده سازی با ترکیب قراردادها، ویژگی ها و کلاس های عمل، راه حلی مقیاس پذیر و قابل نگهداری برای تولید کد QR در لاراول ارائه می کند. با کمک بسته SimpleSoftwareIO QR Code و Imagick برای مدیریت تصویر، می توانید به راحتی این تنظیمات را برای هر نیاز تولید کد QR سفارشی کرده و گسترش دهید.

فراموش نکنید که وابستگی های لازم را نصب کنید و اطمینان حاصل کنید که پسوند Imagick برای پشتیبانی از فرمت PNG فعال است. کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا