Inhaltsverzeichnis
尝试一下
Heim PHP-Framework Laravel Erfahren Sie, wie Sie Ihre Laravel-Anwendung in wenigen Minuten mandantenfähig machen

Erfahren Sie, wie Sie Ihre Laravel-Anwendung in wenigen Minuten mandantenfähig machen

Aug 01, 2020 pm 01:25 PM
laravel

Das Folgende wird von

Laravel vorgestellt. In der Tutorial-Kolumne wird in wenigen Minuten die Methode zum Erstellen von Laravel-Anwendungen mit mehreren Mandanten vorgestellt Freunde in Not!

Erfahren Sie, wie Sie Ihre Laravel-Anwendung in wenigen Minuten mandantenfähig machen

In diesem Tutorial verwenden wir das

Tenancy for Laravel-Paket, um Multi-Tenancy für Laravel-Anwendungen zu implementieren.

Es handelt sich um ein Multi-Tenant-Paket, das es Ihrer Laravel-Anwendung ermöglicht, Multi-Tenant zu sein,

ohne dass zusätzlicher Code geschrieben werden muss. Es ist genauso Plug-and-Play wie ein Mietpaket.

Randnotiz: In diesem Tutorial behandeln wir die gängigste Einrichtung – Multi-Datenbank-Mandantenfähigkeit auf mehreren Domänen. Sollten Sie ein anderes Setup benötigen, ist dies zu 100 % möglich. Schauen Sie sich einfach das Paket an.

Wie es funktioniert

Das Besondere an diesem Paket ist, dass es Sie nicht dazu zwingt, Ihre Bewerbung auf eine bestimmte Art und Weise zu verfassen. Sie können Ihre Anwendung so schreiben, wie Sie es gewohnt sind, und unter der Haube wird automatisch Mandantenfähigkeit generiert. Sie können Pakete sogar in bestehende Anwendungen integrieren.

So funktioniert es:

1. Wenn der Server eine Benutzeranfrage empfängt

2. Das Programm kann anhand der Anfrage erkennen, zu welchem ​​Mandanten die Anfrage gehört. (Über den Hauptdomänennamen, den Subdomänennamen, den Pfad, den Anforderungsheader, die Abfrageparameter usw.)
3. Das Programm wechselt vom
Standard-Datenbanklink zum aktuellen Mandantenlink. 4. Alle Datenbankaufrufe, Cache-Aufrufe, Warteschlangenaufrufe und andere Vorgänge werden automatisch dem Mandanten und dem Switch zugeordnet.

Installation

Der erste Schritt besteht darin, das Paket über Composer zu installieren. Der Befehl lautet wie folgt:

composer require stancl/tenancy
Nach dem Login kopieren
Führen Sie dann den Befehl

wie folgt aus: tenancy:install

php artisan tenancy:install
Nach dem Login kopieren
Der Vorgang erzeugt die folgenden Dateien: Migrationsdateien, Konfigurationsdateien, Routingdateien und einen Dienstanbieter.

Lassen Sie uns die Datenbank einrichten und die Datenbankmigration mit dem folgenden Befehl durchführen:

php artisan migrate
Nach dem Login kopieren
Dann registrieren Sie den Dienstanbieter in

. Stellen Sie sicher, dass Sie den Code an der folgenden Stelle platzieren:config/app.php

/*
 * Application Service Providers...
 */
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\TenancyServiceProvider::class, // <-- 放于此处
Nach dem Login kopieren

Jetzt erstellen wir ein benutzerdefiniertes Mandantenmodell. Das Paket unterliegt keinen Einschränkungen. Um eine separate Datenbank und Domäne zu verwenden, müssen wir ein leicht angepasstes Mandantenmodell erstellen. Erstellen Sie eine

-Datei mit dem folgenden Code: app/Tenant.php

<?php

namespace App;

use Stancl\Tenancy\Database\Models\Tenant as BaseTenant;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Concerns\HasDatabase;
use Stancl\Tenancy\Database\Concerns\HasDomains;

class Tenant extends BaseTenant implements TenantWithDatabase
{
    use HasDatabase, HasDomains;
}
Nach dem Login kopieren

Jetzt weisen wir das Paket an, dieses Modell mit Mietern zu verwenden:

// config/tenancy.php file

&#39;tenant_model&#39; => \App\Tenant::class,
Nach dem Login kopieren
Zwei Teile

Das Paket wird Ihnen bereitgestellt Die Anwendung wird als zwei separate Teile behandelt:

    Zentrale Anwendung – hostet die Anmeldeseite, möglicherweise ein zentrales Dashboard zur Verwaltung von Mietern usw.
  • Mandantenanwendung – Dies ist der verwendete Teil durch Ihre Mieter. Hier befindet sich höchstwahrscheinlich der Großteil der Geschäftslogik
Teilen Sie die Anwendung auf

Nachdem wir diese beiden Teile verstanden haben, teilen wir die Anwendung entsprechend auf.

Zentrale App

Stellen wir zunächst sicher, dass die zentrale App nur in der zentralen Domäne zugänglich ist.

Gehen Sie zu

und stellen Sie sicher, dass Ihre app/Providers/RouteServiceProvider.php- und web-Routen nur auf der zentralen Domäne geladen werden: api

protected function mapWebRoutes()
{
    foreach ($this->centralDomains() as $domain) {
        Route::middleware('web')
            ->domain($domain)
            ->namespace($this->namespace)
            ->group(base_path('routes/web.php'));
    }
}

protected function mapApiRoutes()
{
    foreach ($this->centralDomains() as $domain) {
        Route::prefix('api')
            ->domain($domain)
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }
}

protected function centralDomains(): array
{
    return config('tenancy.central_domains');
}
Nach dem Login kopieren
Gehen Sie nun zu Ihrer Datei

und fügen Sie tatsächlich zentral hinzu Domain. config/tenancy.php

Ich verwende Valet, daher ist für mich die zentrale Domäne

und die Mandantendomänen sind beispielsweise saas.test und foo.saas.test. bar.saas.test

Also legen wir den

Schlüssel fest: central_domains

'central_domains' => [
    'saas.test', // Add the ones that you use. I use this one with Laravel Valet.
],
Nach dem Login kopieren
Mieter-App

Jetzt kommt der spaßige Teil. Dieser Teil ist fast zu einfach.

Um Code mandantenfähig zu machen, müssen Sie nur Folgendes tun:

    Migrationen in das Verzeichnis
  • verschieben tenant/
  • Routen nach Routing-Datei
  • tenant.php
  • Das war's.

Durch die Migration in diesen bestimmten Ordner und das Einfügen einer Route in diese bestimmte Routendatei wird das Paket benachrichtigt, das den Mandanten auf dieser Route identifiziert.

Wenn Sie eine bestehende Anwendung haben, tun Sie dies mit Ihrem Code. Wenn Sie eine brandneue Anwendung verwenden, folgen Sie bitte dem folgenden Beispiel:

Standardmäßig sehen Ihre Mandantenrouten so aus:

Route::middleware([
    'web',
    InitializeTenancyByDomain::class,
    PreventAccessFromCentralDomains::class,
])->group(function () {
    Route::get('/', function () {
        return 'This is your multi-tenant application. The id of the current tenant is ' . tenant('id');
    });
});
Nach dem Login kopieren

Diese Routen können nur im Mandanten (nicht) verwendet werden -hub)-Domäne Beim Zugriff – die

-Middleware erzwingt dies.

PreventAccessFromCentralDomains Nehmen wir eine kleine Änderung vor, um alle Benutzer in der Datenbank zu speichern, damit wir tatsächlich sehen können, dass die Mehrmandantenfähigkeit funktioniert. Fügen Sie dies zur Middleware-Gruppe hinzu:

Route::get('/', function () {
    dd(\App\User::all());
    return 'This is your multi-tenant application. The id of the current tenant is ' . tenant('id');
});
Nach dem Login kopieren

Jetzt migrieren. Verschieben Sie einfach die Migrationen im Zusammenhang mit der Mandantenanwendung in das Verzeichnis

.

因此,对于我们的示例:要使用户进入租户数据库,让我们将users表迁移移至数据库/迁移/租户。这将防止在中央数据库中创建表,而是在创建租户时在租户数据库中创建表。

尝试一下

现在让我们创建一些租户。

我们还没有可供租户注册的登录页面,但是我们可以在修补程序中创建他们!

因此,让我们打开php artisan tinker并创建一些租户。租户实际上只是模型,因此您可以像其他任何Eloquent模型一样创建它们。

请注意,我们在 这里使用域标识因此,请确保您使用的域指向您的应用程序。我正在使用代客,所以我正在*.saas.test用于租户。如果使用php artisan serve,则可以使用foo.localhost

    >> $tenant1 = Tenant::create(['id' => 'foo']);
    >> $tenant1->domains()->create(['domain' => 'foo.saas.test']);
>>>
    >> $tenant2 = Tenant::create(['id' => 'bar']);
    >> $tenant2->domains()->create(['domain' => 'bar.saas.test']);
Nach dem Login kopieren

现在,我们将在每个租户的数据库中创建一个用户:

App\Tenant::all()->runForEach(function () {
    factory(App\User::class)->create();
});
Nach dem Login kopieren

就是这样-  我们有一个多租户应用程序!

如果您访问  foo.saas.test (或与您的环境相当),则会看到用户转储。

如果访问bar.saas.test,您将看到不同用户的转储  。数据库是100%分离的,我们使用的代码 —App\User::all()— 根本不需要了解租约!这一切都会在后台自动发生。您只需像以前那样编写应用程序,而不必考虑自己的范围界定,并且一切都正常。

当然,现在,租户应用程序中将有一个更复杂的应用程序。仅转储用户的SaaS可能用处不大。这就是您的工作-编写将由租户使用的业务逻辑。包装将处理其余部分。

不过,Tenancy for Laravel  项目的帮助并没有到此结束。该软件包将为您完成与多租户相关的所有繁重工作。但是,如果您要构建SaaS,则仍然需要自己编写计费逻辑,入门流程和类似的标准内容。如果您有兴趣,该项目还提供了一个优质产品:multi-tenant SaaS boilerplate。它旨在通过为您提供通常需要编写的SaaS功能来节省您的时间。所有这些都打包在一个随时可以部署的多租户应用程序中。

原文地址:https://laravel-news.com/multi-tenant

译文地址:https://learnku.com/laravel/t/47951

Das obige ist der detaillierte Inhalt vonErfahren Sie, wie Sie Ihre Laravel-Anwendung in wenigen Minuten mandantenfähig machen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Wie vergleichen sich die Datenverarbeitungsfunktionen in Laravel und CodeIgniter? Jun 01, 2024 pm 01:34 PM

Vergleichen Sie die Datenverarbeitungsfunktionen von Laravel und CodeIgniter: ORM: Laravel verwendet EloquentORM, das eine relationale Klassen-Objekt-Zuordnung bereitstellt, während CodeIgniter ActiveRecord verwendet, um das Datenbankmodell als Unterklasse von PHP-Klassen darzustellen. Abfrage-Builder: Laravel verfügt über eine flexible verkettete Abfrage-API, während der Abfrage-Builder von CodeIgniter einfacher und Array-basiert ist. Datenvalidierung: Laravel bietet eine Validator-Klasse, die benutzerdefinierte Validierungsregeln unterstützt, während CodeIgniter über weniger integrierte Validierungsfunktionen verfügt und eine manuelle Codierung benutzerdefinierter Regeln erfordert. Praxisfall: Beispiel einer Benutzerregistrierung zeigt Lar

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

Fragen und Antworten zum Design der PHP-Microservice-Architektur für Unternehmensanwendungen Fragen und Antworten zum Design der PHP-Microservice-Architektur für Unternehmensanwendungen May 07, 2024 am 09:36 AM

Die Microservice-Architektur nutzt PHP-Frameworks (wie Symfony und Laravel) zur Implementierung von Microservices und folgt RESTful-Prinzipien und Standarddatenformaten zum Entwerfen von APIs. Microservices kommunizieren über Nachrichtenwarteschlangen, HTTP-Anfragen oder gRPC und nutzen Tools wie Prometheus und ELKStack zur Überwachung und Fehlerbehebung.

Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Jun 04, 2024 pm 05:29 PM

Für kleine Projekte eignet sich Laravel, für größere Projekte, die starke Funktionalität und Sicherheit erfordern. CodeIgniter eignet sich für sehr kleine Projekte, die geringes Gewicht und Benutzerfreundlichkeit erfordern.

Welche ist die bessere Template-Engine, Laravel oder CodeIgniter? Welche ist die bessere Template-Engine, Laravel oder CodeIgniter? Jun 03, 2024 am 11:30 AM

Vergleichen Sie Laravel's Blade und die Twig-Vorlagen-Engine von CodeIgniter und wählen Sie je nach Projektanforderungen und persönlichen Vorlieben: Blade basiert auf der MVC-Syntax, die eine gute Codeorganisation und Vorlagenvererbung fördert. Twig ist eine Bibliothek eines Drittanbieters, die flexible Syntax, leistungsstarke Filter, erweiterten Support und eine Sicherheits-Sandbox bietet.

See all articles