mirror of
https://github.com/stancl/tenancy-docs.git
synced 2025-12-13 10:44:03 +00:00
37 lines
No EOL
1.6 KiB
Markdown
37 lines
No EOL
1.6 KiB
Markdown
---
|
|
title: Universal routes
|
|
extends: _layouts.documentation
|
|
section: content
|
|
---
|
|
|
|
# Universal Routes
|
|
|
|
Sometimes, you may want to use the exact same **route action** both in the central application and the tenant application. Note the emphasis on route **action** — you may use the same **path** with different actions in central & tenant routes, whereas this section covers using the same **route and action**.
|
|
|
|
Generally, try to avoid these use cases as much as possible and prefer duplicating the code. Using the same controller and model for users in central & tenant apps will break down once you need slightly different behavior — e.g. different views returned by controllers, different behavior on models, etc.
|
|
|
|
First, enable the `UniversalRoutes` feature by uncommenting the following line in your `tenancy.features` config:
|
|
|
|
```php
|
|
Stancl\Tenancy\Features\UniversalRoutes::class,
|
|
```
|
|
|
|
Next, go to your `app/Http/Kernel.php` file and add the following middleware group:
|
|
|
|
```php
|
|
'universal' => [],
|
|
```
|
|
|
|
We will use this middleware group as a "flag" on the route, to mark it as a universal route. We don't need any actual middleware inside the group.
|
|
|
|
Then, create a route like this:
|
|
|
|
```php
|
|
Route::get('/foo', function () {
|
|
// ...
|
|
})->middleware(['universal', InitializeTenancyByDomain::class]);
|
|
```
|
|
|
|
And the route will work in both central and tenant applications. Should a tenant be found, tenancy will be initialized. Otherwise, the central context will be used.
|
|
|
|
If you're using a different middleware, look at the `UniversalRoutes` feature source code and change the public static property accordingly. |