全球 laravel 模型

Global laravel model

所以我正在开发一个网站。它托管在一台专用服务器上,但会有多个域名指向单个 Laravel 5.1 安装。

每个域名(不包括子查询)都属于一个客户端模型。 每个客户端可以有多个站点,这些站点由子域定义。

例如,我拥有 phil-cross.co.uk。所以在我的客户 table 中,我有一个域为 phil-cross.co.uk.

的客户的记录

然后我在 Sites table 中有多个记录,www.phil-cross.co.ukblogs.phil-cross.co.uk 等等。

该应用程序还可以管理其他域。所以我可能有另一个域名为 joe-bloggs.com 的客户端。

目前我的 laravel 应用程序可以通过域名正确地确定客户端,通过子域正确地确定站点,但是它的方式相当混乱。

目前,我有一个服务提供者,它有一个静态 clientsite 属性,引导方法加载当前客户端和站点并将它们存储在此服务提供者。然后我有一个带有一些辅助方法的外观,可以从服务提供商访问客户端和站点属性。

我希望在应用程序生命周期内的任何给定时间能够访问当前站点的客户端和站点模型。

laravel 中是否有存储全局可访问模型的最佳实践?我的服务提供商/门面目前采用的方式是acceptable还是应该是中间件?还有其他我不知道的方法吗?

Tldr:

如何创建模型的单个实例,并在 laravel 应用程序中随时随地访问它。

我认为使用服务提供商是正确的解决方案,而不是您看起来的处理方式。利用 IoC 创建单例对象,因为单例正是您想要的:一个在应用程序生命周期内仅解析一次的对象:

class SomeServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('SomeClass', function() {
            $myObj = new SomeClass;
            $myObj->determineClient();
            return $myObj;
        });
    }
}

稍后,您可以在应用程序的其他地方执行此操作:

$myObj = app()->make('SomeClass');
echo $myObj->client;

使用这种方法的好处是,如果 SomeClass 更改并添加了对 class 的依赖项,您只需更改该对象在单个位置的构造方式以及这些更改将在对象被使用的任何地方自动生效。