snoeren-development / laravel-domain-scope
该包已被废弃,不再维护。未建议替代包。
通过域名范围您的平台数据。
v1.4.0
2023-02-17 15:09 UTC
Requires
- php: ^8.0
- illuminate/support: ^8.0|^9.0|^10.0
README
此包为您的应用程序添加域范围内容。内容将根据当前(子)域名可用,允许“多个”网站运行相同的代码库。
安装
- 使用Composer安装此包
composer require snoeren-development/laravel-domain-scope
- 然后,使用以下命令将所有资源发布到您的应用程序中
php artisan vendor:publish --provider="SnoerenDevelopment\DomainScope\ServiceProvider"
- 根据您的喜好配置
domain-scope.php
中的设置。 - 如果需要更多域名信息,更新迁移。在模型中也反映这一点。
- 通过添加类名来在
domain-scope.php
中配置范围模型。 - 将
SnoerenDevelopment\DomainScope\Http\Middleware\DetectDomain
添加到您的(全局)中间件堆栈中。 - 将(默认情况下)
domain_id
添加到数据库中的所有范围模型中。如果您想删除域名时清除所有数据,请使用约束外键,例如
$table->foreignId('domain_id')->constrained()->cascadeOnDelete();
要求
此包需要至少PHP 8.0和Laravel 8。
使用方法
安装后,如何处理域名取决于您。例如
- 创建一个中间件,当没有匹配到域名时抛出404错误。
- 让未匹配的请求通过到您应用程序的前端页面。
- 忽略
www
和无子域以显示您的首页。如果其他子域可用,当未找到或显示时抛出404错误。
服务容器
如果已匹配并找到域名,服务容器将接收到两个绑定:“域名”和完整的配置模型类名。您可以使用此来检索当前活动的域名,例如
$domain = app('domain');
或在您的控制器中(或服务容器注入的地方)
use App\Models\Domain; public function index(?Domain $domain): Response { // $domain contains the matched domain or null if not matched. }
提示:使用中间件强制匹配域名到路由中,以防止传递 null
。
模型
范围模型将仅返回当前活动域的结果。如果没有匹配到域名,则返回所有结果,因为没有应用范围。
鸣谢
许可
MIT许可。有关更多信息,请参阅LICENSE。