danilovl/async-bundle

Symfony bundle provides simple delayed function call.

Installs: 181

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:symfony-bundle

v0.4.5 2024-11-15 19:04 UTC

This package is auto-updated.

Last update: 2024-11-15 19:10:51 UTC


README

phpunit downloads latest Stable Version license

AsyncBundle

About

Symfony bundle provides simple delayed function call in AsyncListener after symfony send response.

The user gets a response faster because all unnecessary logic is processed later. For example: logging, creating rabbitmq queues or other unnecessary things.

Alt text

The user receives a response from the server much earlier and does not wait until unnecessary processes are finished.

Alt text

Requirements

  • PHP 8.3 or higher
  • Symfony 7.0 or higher

1. Installation

Install danilovl/async-bundle package by Composer:

composer require danilovl/async-bundle

Add the AsyncBundle to your application's bundles if does not add automatically:

<?php
// config/bundles.php

return [
    // ...
    Danilovl\AsyncBundle\AsyncBundle::class => ['all' => true]
];

2. Usage

AsyncService has simple three methods add, remove and reset.

<?php declare(strict_types=1);

namespace App\Controller;

use Danilovl\AsyncBundle\Attribute\PermissionMiddleware;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\{
    Request,
    Response
};

class HomeController extends AbstractController
{
    public function __construct(private AsyncService $asyncService)
    {
    }

    public function index(Request $request): Response
    {
        $this->asyncService->add(function () {
            // add callback with priority 0 and without name
        });

        $this->asyncService->add(function () {
            // add callback with priority 10
            // higher means sooner
        }, 10);    
        
        $this->asyncService->add(function () {
            // add callback with priority -10
            // less means later
        }, -10);    
        
        $this->asyncService->add(function () {
            // add callback with priority and name
        }, 90, 'sendEmail');     
        
        $this->asyncService->add(function () {
            // add second callback with priority and same name
        }, 100, 'sendEmail');
        
        // remove all callbacks with name 'sendEmail'
        $this->asyncService->remove(['sendEMail']);             
      
        // remove all callbacks with name 'sendEmail' and priority 
        $this->asyncService->remove(['sendEMail'], 100);        
        
        // remove all callbacks
        $this->asyncService->reset();

        return $this->render('home/index.html.twig');
    }
}

License

The AsyncBundle is open-sourced software licensed under the MIT license.