Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Webpush Bundle Laravel Package

bentools/webpush-bundle

Symfony bundle to send Web Push notifications using the Web Push protocol. Manage user-to-subscription associations (multi-device and shared devices) with your own persistence (Doctrine or custom). Includes VAPID key generation and backend APIs for subscriptions.

View on GitHub
Deep Wiki
Context7

The UserSubscription Manager will handle creation and persistence of UserSubscription entities.

It can be connected to Doctrine, or you're free to use your own logic.

Create your UserSubscription manager

Then, create a class that implements BenTools\WebPushBundle\Model\Subscription\UserSubscriptionManagerInterface with your own logic.

Example with Doctrine:

# src/Services/UserSubscriptionManager.php

namespace App\Services;

use App\Entity\UserSubscription;
use BenTools\WebPushBundle\Model\Subscription\UserSubscriptionInterface;
use BenTools\WebPushBundle\Model\Subscription\UserSubscriptionManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\User\UserInterface;

class UserSubscriptionManager implements UserSubscriptionManagerInterface
{
    /**
     * [@var](https://github.com/var) ManagerRegistry
     */
    private $doctrine;

    /**
     * UserSubscriptionManager constructor.
     * [@param](https://github.com/param) ManagerRegistry $doctrine
     */
    public function __construct(ManagerRegistry $doctrine)
    {
        $this->doctrine = $doctrine;
    }

    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function factory(UserInterface $user, string $subscriptionHash, array $subscription, array $options = []): UserSubscriptionInterface
    {
        // $options is an arbitrary array that can be provided through the front-end code.
        // You can use it to store meta-data about the subscription: the user agent, the referring domain, ...
        return new UserSubscription($user, $subscriptionHash, $subscription);
    }
    
    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function hash(string $endpoint, UserInterface $user): string {
        return md5($endpoint); // Encode it as you like    
    }

    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function getUserSubscription(UserInterface $user, string $subscriptionHash): ?UserSubscriptionInterface
    {
        return $this->doctrine->getManager()->getRepository(UserSubscription::class)->findOneBy([
            'user' => $user,
            'subscriptionHash' => $subscriptionHash,
        ]);
    }

    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function findByUser(UserInterface $user): iterable
    {
        return $this->doctrine->getManager()->getRepository(UserSubscription::class)->findBy([
            'user' => $user,
        ]);
    }

    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function findByHash(string $subscriptionHash): iterable
    {
        return $this->doctrine->getManager()->getRepository(UserSubscription::class)->findBy([
            'subscriptionHash' => $subscriptionHash,
        ]);
    }

    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function save(UserSubscriptionInterface $userSubscription): void
    {
        $this->doctrine->getManager()->persist($userSubscription);
        $this->doctrine->getManager()->flush();
    }

    /**
     * [@inheritDoc](https://github.com/inheritDoc)
     */
    public function delete(UserSubscriptionInterface $userSubscription): void
    {
        $this->doctrine->getManager()->remove($userSubscription);
        $this->doctrine->getManager()->flush();
    }

}

Now, register your UserSubscriptionManager in your services.yaml:

# app/config/services.yml (SF3)
# config/services.yaml (SF4) 

services:
    App\Services\UserSubscriptionManager:
        class: App\Services\UserSubscriptionManager
        arguments:
            - '[@doctrine](https://github.com/doctrine)'
        tags:
            - { name: bentools_webpush.subscription_manager, user_class: 'App\Entity\User' }

Previous: The UserSubscription Class

Next: Configuration

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky