PHPackages                             zoker/filament-multisite - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. zoker/filament-multisite

ActiveLibrary[Admin Panels](/categories/admin)

zoker/filament-multisite
========================

Multisite plugin for Laravel with Filament managing

2.1(1mo ago)0209MITPHPPHP ^8.4

Since Nov 6Pushed 1mo agoCompare

[ Source](https://github.com/zoker68/filament-multisite)[ Packagist](https://packagist.org/packages/zoker/filament-multisite)[ RSS](/packages/zoker-filament-multisite/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (14)Versions (20)Used By (0)

Filament Multisite
==================

[](#filament-multisite)

Manage multiple sites within a single Laravel application with first‑class Filament integration.

The package provides:

- Multi‑site routing (domains / prefixes / locales)
- Localized routes and helpers for URL generation
- Per‑site models via `HasMultisite`
- Filament admin integration with site switching

---

Requirements
------------

[](#requirements)

- PHP 8.4+
- Laravel 12+
- Filament 4+ (for admin panel integration)

---

Installation
------------

[](#installation)

1. **Install the package**

    ```
    composer require zoker/filament-multisite
    ```
2. **Publish and run migrations**

    ```
    php artisan vendor:publish --tag=filament-multisite-migrations
    php artisan migrate
    ```
3. **Register the Filament plugin**

    In your Filament panel configuration:

    ```
    use Zoker\FilamentMultisite\Multisite;

    // In your Filament panel definition
    ->plugin(Multisite::make())
    ```

---

Frontend usage
--------------

[](#frontend-usage)

### Defining multisite routes

[](#defining-multisite-routes)

Create site‑specific routes in `routes/web.php` using the `multisite` macro:

```
use Illuminate\Support\Facades\Route;

Route::multisite(function () {
    // These routes will be available for all sites
    Route::get('/', [HomeController::class, 'index'])->name('home');

    // Add more site‑specific routes here
});
```

### Translatable routes

[](#translatable-routes)

Use the `translatable` macro for localized paths. Translation keys should be placed in your application's `resources/lang` directory:

```
Route::translatable(function () {
    Route::get(__('routes.about'), [AboutController::class, 'index'])->name('about');
});
```

### Generating URLs

[](#generating-urls)

Use the `multisite_route()` helper to generate URLs that respect the current site and locale:

```
// Basic usage
$url = multisite_route('home');

// With parameters
$url = multisite_route('products.show', ['product' => $product]);

// Absolute URLs
$url = multisite_route('login', [], true);
```

---

Managing the current site (frontend)
------------------------------------

[](#managing-the-current-site-frontend)

### Facade: `SiteManager`

[](#facade-sitemanager)

```
use Zoker\FilamentMultisite\Facades\SiteManager;

// Get current site
$currentSite = SiteManager::getCurrentSite();

// Set current site by ID
SiteManager::setCurrentSiteById(1);

// Set current site by request
SiteManager::setCurrentSiteByRequest($request);
```

### Helper: `currentSite()`

[](#helper-currentsite)

```
// Get current site
$site = currentSite();
```

### Middleware

[](#middleware)

Use middleware to automatically resolve the current site from the request:

```
use Illuminate\Support\Facades\Route;
use Zoker\FilamentMultisite\Http\Middleware\MultisiteMiddleware;

Route::middleware([MultisiteMiddleware::class])->group(function () {
    // Your routes here
});
```

You can also register the middleware in the `web` group.

---

Filament integration
--------------------

[](#filament-integration)

### Site switching in Filament

[](#site-switching-in-filament)

In Filament the active site is managed via the `FilamentSiteManager`. The currently selected site is stored in the session and is used automatically by models with the `HasMultisite` trait when Filament is serving the request.

Add the `SiteSwitcher` action to your Filament resources:

```
use Zoker\FilamentMultisite\Filament\Actions\SiteSwitcher;

public function getActions(): array
{
    return [
        SiteSwitcher::make(),
    ];
}
```

Translatable models
-------------------

[](#translatable-models)

To use translatable models, add the `HasTranslations` trait to your model and define the translatable attributes.
These attributes must be stored in JSON columns in your database.

```
use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;

class YourModel extends Model
{
    use HasTranslations;

    /** @var array */
    public array $translatable = ['attribute'];
}

## Per‑site models: `HasMultisite`

To store separate content per site, add the `HasMultisite` trait to your model:

```php
use Illuminate\Database\Eloquent\Model;
use Zoker\FilamentMultisite\Traits\HasMultisite;

class YourModel extends Model
{
    use HasMultisite;
}
```

This trait adds a global scope on the `site_id` column:

- In **frontend/HTTP** context the current site is resolved via `SiteManager`.
- In **Filament** context the current site is resolved via `FilamentSiteManager` (selected site in the admin panel).

The trait also provides helpers like `createForCurrentSite()` to create records for the active site.

### Filament resources: `HasMultisiteResource`

[](#filament-resources-hasmultisiteresource)

To make a Filament resource aware of the active site, use the `HasMultisiteResource` trait:

```
use Filament\Resources\Resource;
use Zoker\FilamentMultisite\Traits\HasMultisiteResource;

class YourResource extends Resource
{
    use HasMultisiteResource;
}
```

---

Translatable resource traits
----------------------------

[](#translatable-resource-traits)

For translatable Filament resources you can use:

- `Zoker\FilamentMultisite\Traits\Translatable\Resources\Pages\TranslatableEditRecord` – for `Resource/Pages/Edit*`
- `Zoker\FilamentMultisite\Traits\Translatable\Resources\Pages\TranslatableListRecord` – for `Resource/Pages/List*`
- `Zoker\FilamentMultisite\Traits\Translatable\Resources\Pages\TranslatableCreateRecord` – for `Resource/Pages/Create*`

---

Migrations
----------

[](#migrations)

To link your models to a specific site, add a foreign key to the `sites` table:

```
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Zoker\FilamentMultisite\Models\Site;

Schema::table('your_table', function (Blueprint $table) {
    $table->foreignIdFor(Site::class)->constrained()->cascadeOnDelete();
});
```

---

Alternate Links &amp; Canonical URLs
------------------------------------

[](#alternate-links--canonical-urls)

The package provides automatic generation of alternate links and canonical URLs for SEO optimization.

### Frontend Components

[](#frontend-components)

#### Alternate Links Head

[](#alternate-links-head)

Include alternate links in your HTML head section:

```

```

This will generate:

- `` for the specified canonical site (if configured)
- `` for all available sites

#### Site Picker

[](#site-picker)

Display a site/language switcher component:

```

```

### Configuration

[](#configuration)

Publish the configuration file:

```
php artisan vendor:publish --tag=multisite-config
```

Set up the canonical site in `config/multisite.php`:

```
