Download the PHP package offload-project/laravel-notification-preferences without Composer

On this page you can find all versions of the php package offload-project/laravel-notification-preferences. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package laravel-notification-preferences

Latest Version on Packagist GitHub Tests Action Status Total Downloads

Laravel Notification Preferences

A Laravel package for managing user notification preferences with support for multiple channels, notification groups, and automatic channel filtering — perfect for building notification settings UIs.

Features

Requirements

Installation

Publish the config and migrations:

Quick Start

1. Add the trait to your User model:

2. Register your notifications in config/notification-preferences.php:

3. Send notifications normally — preferences are applied automatically:

Managing Preferences

Bulk Operations

Convenient methods for "disable all emails" or "mute marketing" features:

All bulk methods return the count of updated preferences and automatically skip forced channels.

Explicit Control with Trait

For granular control, use the ChecksNotificationPreferences trait in your notification:

Forced Channels

Prevent users from disabling critical notifications:

Permission Gating

Tie notifications to a Gate ability so users only see — and only receive — notifications they're authorized for. Works with native policies, Spatie Permission, Bouncer, or any package that registers with Laravel's Gate.

Option 1: Implement the interface (recommended for notifications you own):

Option 2: Declare the ability in config (for notifications from other packages):

When a user fails the Gate check:

The notification instance is passed to your Gate closure at dispatch time, so you can authorize against the payload:

Per-Channel Defaults

Set specific channels enabled by default:

Events

The package dispatches events when preferences change:

NotificationAuthorizationDenied is dispatched whenever a notification is blocked by a failing Gate check (see Permission Gating):

Using the Facade

For quick access without dependency injection:

Using the Interface

For dependency injection and testing, use the interface:

Table Structure Output

The getNotificationPreferencesTable() method returns UI-ready data:

Inertia.js Integration

Share preferences via middleware:

Cache Management

Preferences are cached for performance (default: 24 hours). Configure the TTL in your config:

Clear caches when needed:

Exception Handling

The package validates all inputs and throws specific exceptions with helpful messages:

Email Unsubscribe Links

The package can generate signed URLs that let users unsubscribe directly from emails — no login required. It also supports List-Unsubscribe headers for native unsubscribe buttons in Gmail, Apple Mail, and other clients (RFC 8058).

Adding Unsubscribe Links to Notifications

Use the HasUnsubscribeUrl trait on your notification class:

withUnsubscribeHeaders() adds List-Unsubscribe and List-Unsubscribe-Post headers so email clients can show native unsubscribe buttons. The getUnsubscribeUrl() method generates a signed URL you can place anywhere in the email body.

Generating URLs Directly

You can also generate URLs from the user model or facade:

How It Works

When a user clicks the unsubscribe link, the package:

  1. Validates the signed URL (tamper-proof, no auth required)
  2. Disables the notification type for that channel
  3. Returns a JSON response, or redirects to your configured URL

The POST method is also supported for RFC 8058 one-click unsubscribe from email clients.

Configuration

Redirect Example

When redirect_url is set, users are redirected after unsubscribing:

This lets you handle the confirmation page in your own frontend (Blade, Inertia, Livewire, etc.).

Uninstalling

Configuration Reference

Global Options

Option Type Description
default_preference string opt_in or opt_out for all notifications
cache_ttl int Cache duration in minutes (default: 1440 = 24h)
table_name string Database table name (default: notification_preferences)
user_model string User model class (default: App\Models\User)

Channels

Option Type Description
label string Display name for UI
enabled bool Whether channel is available (default: true)

Groups

Option Type Description
label string Display name for UI
description string Optional description for UI
default_preference string opt_in or opt_out (overrides global)
order int Sort order in UI

Notifications

Option Type Description
group string Group key this notification belongs to
label string Display name for UI
description string Optional description for UI
default_preference string opt_in or opt_out (overrides group)
default_channels array Specific channels enabled by default
force_channels array Channels that cannot be disabled
ability string Gate ability the user must pass to receive (also hides from preferences UI). Prefer the AuthorizesNotification interface for notifications you own.
order int Sort order within group

Unsubscribe

Option Type Description
enabled bool Register unsubscribe routes (default: true)
route_prefix string URL prefix for routes (default: notification-preferences)
middleware array Middleware stack for routes (default: ['web'])
url_ttl int|null Signed URL expiration in minutes (null = permanent)
redirect_url string|null Redirect after action, or null for JSON response
resubscribe_enabled bool Register resubscribe route (default: true)

Testing

License

The MIT License (MIT). Please see License File for more information.


All versions of laravel-notification-preferences with dependencies

PHP Build Version
Package Version
Requires php Version ^8.3
illuminate/support Version ^11.0|^12.0|^13.0
illuminate/notifications Version ^11.0|^12.0|^13.0
illuminate/database Version ^11.0|^12.0|^13.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package offload-project/laravel-notification-preferences contains the following files

Loading the files please wait ...