janes.hu logo

Laravel Manager Pattern több driver kezeléséhez

By Janes Zsolt | 2026.04.21

Laravel Manager Pattern több driver kezeléséhez

A Laravel Manager pattern egy tiszta és skálázható megoldás több szolgáltató egységes kezelésére. A cikk bemutatja, hogyan készíthetünk konfigurálható számlázó driver rendszert Laravelben Billingo és PDF driverekkel. Az implementáció tartalmaz konfigurációs fájlt, interface-t, drivereket, managert, service provider regisztrációt és facade használatot. A pattern előnye, hogy egyszerűen bővíthető, könnyen konfigurálható és egységes API-t biztosít különböző szolgáltatókhoz.

Magyarországon több számlázó szolgáltatás is elérhető, például a Billingo vagy a Számlázz.hu. Sok projektben fontos szempont, hogy az ügyfél kiválaszthassa, melyik szolgáltatót szeretné használni.

Ahhoz, hogy a szolgáltatók közötti váltás egyszerű és konfigurálható legyen, a Laravel Manager pattern kiváló megoldás. A Laravel belsőleg is ezt a mintát használja például a cache, mail, queue vagy filesystem driverek kezelésére.

Ebben a cikkben megmutatom, hogyan készíthetünk egyszerű számlázó driver rendszert Laravel Manager használatával.

Konfigurációs fájl létrehozása

Hozzuk létre a config/invoice.php fájlt.

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Alapértelmezett számlázó driver
    |--------------------------------------------------------------------------
    |
    | Elérhető driverek: pdf, billingo
    |
    */

    'driver' => env('INVOICE_DRIVER', 'pdf'),
];

Ezután a .env fájlban egyszerűen kiválaszthatjuk az alapértelmezett drivert.

INVOICE_DRIVER=pdf

vagy

INVOICE_DRIVER=billingo

Driver Interface létrehozása

Hozzuk létre az interface-t itt: app/Drivers/InvoiceInterface.php.

<?php

namespace App\Drivers;

interface InvoiceInterface
{
    public function create(array $data): mixed;
}

Az interface biztosítja, hogy minden driver ugyanazt az API-t használja.

Billingo Driver létrehozása

Hozzuk létre az app/Drivers/Billingo.php fájlt.

<?php

namespace App\Drivers;

class Billingo implements InvoiceInterface
{
    public function create(array $data): mixed
    {
        // Számla létrehozása Billingo API segítségével

        return true;
    }
}

PDF Driver létrehozása

Hozzuk létre az app/Drivers/PDF.php fájlt.

<?php

namespace App\Drivers;

class PDF implements InvoiceInterface
{
    public function create(array $data): mixed
    {
        // PDF számla generálása

        return true;
    }
}

Invoice Manager létrehozása

Hozzuk létre az app/Managers/InvoiceManager.php fájlt.

<?php

namespace App\Managers;

use App\Drivers\Billingo;
use App\Drivers\PDF;
use Illuminate\Support\Manager;

class InvoiceManager extends Manager
{
    public function createBillingoDriver(): Billingo
    {
        return $this->container->make(Billingo::class);
    }

    public function createPdfDriver(): PDF
    {
        return $this->container->make(PDF::class);
    }

    public function getDefaultDriver(): string
    {
        return $this->config->get('invoice.driver');
    }
}

A Manager osztály automatikusan kezeli a driverek feloldását a driver() metódus segítségével.

Például:

app('invoice')->driver('billingo');

belsőleg ezt fogja meghívni:

createBillingoDriver()

A Manager regisztrálása

Regisztráljuk a managert az app/Providers/AppServiceProvider.php fájlban.

<?php

namespace App\Providers;

use App\Managers\InvoiceManager;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->singleton('invoice', function ($app) {
            return new InvoiceManager($app);
        });
    }
}

Facade létrehozása

Hozzuk létre az app/Facades/Invoice.php fájlt.

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

/**
 * @method static mixed create(array $data)
 * @method static mixed driver(string|null $driver = null)
 */
class Invoice extends Facade
{
    protected static function getFacadeAccessor(): string
    {
        return 'invoice';
    }
}

Használat

Mostantól bárhonnan használhatjuk a számlázó szolgáltatást az alkalmazásban.

use App\Facades\Invoice;

Invoice::create($data);

A Laravel automatikusan az alapértelmezett drivert fogja használni.

Driver váltás futásidőben

A drivert dinamikusan is módosíthatjuk.

Invoice::driver('billingo')->create($data);

vagy

Invoice::driver('pdf')->create($data);

Miért hasznos a Manager pattern?

A Manager pattern számos előnyt biztosít:

  • Egyszerű driver váltás

  • Központi konfiguráció

  • Tiszta absztrakciós réteg

  • Könnyen bővíthető architektúra

  • Jobb tesztelhetőség

  • Egységes API minden szolgáltatóhoz

Új számlázó szolgáltató hozzáadásához csak egy új driver osztályt kell létrehozni és regisztrálni a managerben.

Összegzés

A Laravel Manager pattern egy tiszta és skálázható megoldás több szolgáltató egységes kezelésére.

Különösen hasznos lehet:

  • Számlázó rendszereknél

  • Fizetési gateway-eknél

  • SMS szolgáltatóknál

  • Cloud storage szolgáltatóknál

  • Email szolgáltatóknál

Ha az alkalmazásod több, egymással felcserélhető szolgáltatót használ, akkor a Laravel Manager pattern kiváló választás lehet.

További források

Ha tetszett a cikk kérlek oszd meg, hogy másokhoz is eljusson

Janes Zsolt

Janes Zsolt

Magyar Laravel fejlesztő vagyok több mint 10 év tapasztalattal, főként modern webalkalmazások fejlesztésében. Napi szinten dolgozom Laravel, Vue.js, valamint különböző cloud és DevOps eszközökkel, illetve AI-alapú megoldásokkal (OpenAI API). Részt vettem egyszerű weboldalak és komplex rendszerek, webshopok és admin felületek fejlesztésében is. Jelenleg az AI, Python és vektor adatbázisok területén fejlesztem magam folyamatosan.

Olvasd tovább...

Fedezz fel további érdekes cikkeket