snoeren-development / laravel-domain-scope

该包已被废弃,不再维护。未建议替代包。

通过域名范围您的平台数据。

v1.4.0 2023-02-17 15:09 UTC

This package is auto-updated.

Last update: 2024-04-17 17:51:15 UTC


README

Latest version on Packagist Software License Build status Downloads

此包为您的应用程序添加域范围内容。内容将根据当前(子)域名可用,允许“多个”网站运行相同的代码库。

安装

  1. 使用Composer安装此包
composer require snoeren-development/laravel-domain-scope
  1. 然后,使用以下命令将所有资源发布到您的应用程序中
php artisan vendor:publish --provider="SnoerenDevelopment\DomainScope\ServiceProvider"
  1. 根据您的喜好配置 domain-scope.php 中的设置。
  2. 如果需要更多域名信息,更新迁移。在模型中也反映这一点。
  3. 通过添加类名来在 domain-scope.php 中配置范围模型。
  4. SnoerenDevelopment\DomainScope\Http\Middleware\DetectDomain 添加到您的(全局)中间件堆栈中。
  5. 将(默认情况下)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