单身人士创造了两次

时间:2017-06-26 07:25:14

标签: laravel singleton laravel-5.4 global-scope

在Laravel 5.4中,我已经注册了一个服务提供者,它为我的Context类创建了一个单例,它保存了应用程序上下文。

ContextServiceProvider     

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App;

class ContextServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        // Set-up application context
        $context = app('context');
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('context', function ($app) {
            return new App\Context();
        });

    }
}

然后我创建一个具有全局范围的Eloquent模型。

模特媒体

namespace App\Models;

use App\Scopes\SchoolScope;
use Illuminate\Database\Eloquent\Model;

class Media extends Model
{    
    public static function boot()
    {
        parent::boot();

        static::addGlobalScope(new SchoolScope());
    }    
}

现在,当我访问范围SchoolScope中的Context单例时,单例创建两次

SchoolScope

namespace App\Scopes;

use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

use App\Models\School;

class SchoolScope implements Scope
{
    protected $school;

    public function __construct()
    {        
        $this->school = app('context')->school;
    }

    public function apply(Builder $builder, Model $model)
    {        
        $builder->where('school_id', '=', $this->school->id);
    }
}

有谁知道为什么单身人士被创造两次?

0 个答案:

没有答案
相关问题