Les systèmes multi-locataires sont une aubaine pour les développeurs Web qui doivent gérer plusieurs clients simultanément sur un ensemble de programmes back-end.
Une extension Laravel multitenancy publiée par Spatie. Cette extension vous aide principalement à construire rapidement un système multi-tenant :
laravel-multitenancy Adresse de version de l'extension : t.co/q9HzfkNw7w
Le concept de l'extension est de vous fournir. avec la possibilité de réaliser des éléments de base multi-tenants d'un locataire.Documentation : t.co/zspuLyt3KN
Démo vidéo (cas) : t.co/i3QzTezcuY pic.twitter.com/cy2Fk4tIe6
— Freek Van der Herten (@freekmurze) Mai 20 , 2020
D'après l'article d'introduction de Freek Van der Herten : post d'introduction, vous comprendrez que cette extension ne fournit aux utilisateurs que les éléments de base pour mettre en œuvre un système multi-tenant.
Vous pouvez bénéficier des commodités suivantes grâce à cette extension :
Déterminez quel locataire vous êtes actuellement.
Modifications en cascade de la configuration des locataires.
Créez une nouvelle base de données de locataires et un outil de migration de données entre locataires.
Veuillez consulter le document spécifique pour une introduction et une utilisation détaillées : laravel-multitenancy documenation.
Le cœur de cette extension est : le modèle Tenant
, qui est utilisé pour les locataires Après la création de l'instance, vous pouvez rapidement utiliser et accéder au locataire actuel via certaines méthodes de traversée fournies par cette extension. Tenant
模型,该模型用于租户实例的创建,您可以通过该扩展提供的一些遍历方法快速使用和访问当前租户。
use Spatie\Multitenancy\Models\Tenant; // 获取当前租户,不存在返回 null Tenant::current() // 通过容器的方式获取当前租户 app('currentTenant'); // 确认当前是否有租户 Tenant::checkCurrent() // 将某个租户设置为当前租户 $tenant->makeCurrent(); // 忘记当前租户 Tenant::forgetCurrent();
在安装该扩展之后,在数据库中你会发现 tenants
数据表,该表用于存储租户信息。该扩展实现了一些便利的方法,包括通过域名来确定当前租户,其中 DomainTenantFinder
类,就是用于查询并设置当前租户。当然,你也可以配置自定义查询方式,只要实现 TenantFinder
抽象类即可。
在查找租户时您可能还需要考虑一些必要判定。该扩展提供了一些租户判定的中间件,比如根据入参来确定并设置当前所属租户的中间件 NeedsTenant
,以及防止非当前租户的用户访问的 EnsureValidTenantSession
全局中间件。
多租户系统还需要考虑的问题就是:控制台命令和队列范围的界定。默认情况下,队列的执行与否是不会会根据租户来做区分的,该扩展中,您可以通过配置 TenantAware
和 NotTenantAware
参数来实现特定租户可以使用特定队列的需求。
当然,您也可以通过 tenants:artisan
# 所有租户执行迁移 php artisan tenants:artisan migrate # 特定租户执行迁移 php artisan tenants:artisan "migrate --seed" --tenant=123
Après avoir installé l'extension, vous trouverez la table de données tenants
dans la base de données, qui est utilisée pour stocker les informations sur les locataires. Cette extension implémente certaines méthodes pratiques, notamment la détermination du locataire actuel par nom de domaine. La classe DomainTenantFinder
est utilisée pour interroger et définir le locataire actuel. Bien entendu, vous pouvez également configurer une méthode de requête personnalisée, à condition d'implémenter la classe abstraite TenantFinder
. Vous devrez peut-être également prendre en compte certains jugements nécessaires lors de la recherche de locataires. Cette extension fournit un middleware de détermination de locataire, tel que le middleware NeedsTenant
qui détermine et définit le locataire actuel en fonction des paramètres d'entrée, et le EnsureValidTenantSession
qui empêche l'accès par des utilisateurs autres que le locataire actuel > Middleware global.
Console et file d'attente Tenant-Aware
Un autre problème qui doit être pris en compte dans un système multi-tenant est : la définition des commandes de console et des plages de files d'attente. Par défaut, l'exécution de la file d'attente ne sera pas différenciée en fonction du locataire. Dans cette extension, vous pouvez configurer les paramètresTenantAware
et NotTenantAware
pour implémenter une file d'attente spécifique. -des exigences spécifiques peuvent être utilisées. ## Plus de connaissancesBien sûr, vous pouvez également utiliser la commande
tenants:artisan
pour implémenter la migration sous un locataire spécifique. Le cas est le suivant :rrreee
À propos de l'utilisation de. extensions et Pour installer, veuillez lire spatie/laravel-multitenancy
.🎜🎜Pour plus de détails, veuillez lire 🎜Le post de Freek🎜. 🎜🎜🎜Adresse originale : https://laravel-news.com/spatie-multitenancy-laravel🎜🎜Adresse de traduction : https://learnku.com/laravel/t/45142🎜🎜🎜[Recommandations associées : 🎜tutoriel vidéo laravel 🎜】🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!