rtroncoso/laravel-context

根据上下文绑定服务提供者

2.0.2 2015-06-10 14:31 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:09:28 UTC


README

Total Downloads Build Status License

这个简单而强大的包可以帮助你根据上下文加载不同的服务提供者。上下文可以通过路由组的 context 中间件或在 Context 门面中设置。

它支持 Laravel 5.1.x (发布: ^2.0.0)Laravel 5.0.x (发布: ^1.0.0)

它是用来做什么的?

假设你的应用程序中有两个上下文:一个 管理面板 和一个 RESTful WebService。这两个上下文肯定完全不同,因为在其中一个上下文中,你可能想要获取所有资源(例如,包括已删除的),而在另一个上下文中,你只想获取活动资源。

这是服务提供者大有用武之地的时候,唯一的问题是,Laravel 并没有提供加载不同上下文的不同服务提供者的默认解决方案。

此包允许你将不同的存储库注册到单个接口,并通过上下文的服务提供者绑定它们,使用 Laravel 的出色 IoC 容器来解析根据我们所在的上下文需要绑定哪个具体实现。

安装说明

要安装此包,你只需将以下行添加到你的 composer.json 文件中

Laravel 5.0.x

"require": {
    "rtroncoso/laravel-context": "^1.0.0"
}

Laravel 5.1.x

"require": {
    "rtroncoso/laravel-context": "^2.0.0"
}

安装完成后,你需要在 config/app.php 中添加一些内容

providers 数组的末尾添加以下内容

'providers' => [
    ...
    'Cupona\Providers\ContextServiceProvider',
]

aliases 数组的末尾添加以下内容

'aliases' => [
    ...
    'Cupona\Facades\Context',
]

然后,你需要在 App/Http/Kernel.php 文件中的 $routeMiddleware 数组中添加上下文中间件

 protected $routeMiddleware => [
     ...
     'context' => 'Cupona\Middleware\ContextMiddleware',
 ]

最后但同样重要的是,运行此命令以发布上下文配置文件

$ php artisan vendor:publish --provider="Cupona\Providers\ContextServiceProvider" --tag="config"

包使用

所以,这里是有趣的部分!你有两种使用此包的方法,你可以通过 routes/route groups actions 加载不同的上下文,或者你可以使用 Context 门面。

路由 & 路由组

如果你希望你的上下文根据你所在的路由或路由组加载,你只需在 routes.php 文件中声明你需要的上下文并创建你的服务提供者。

让我们看看一个例子,如果你想加载 /admin 路由的 backend 上下文,你需要设置你的 routes.php 文件如下

Laravel 5.1.x

Route::group(['prefix' => 'admin', 'middleware' => 'context:backend', function() {
    
    // Your contextually loaded routes go here
    
}]); 

Laravel 5.0.x

Route::group(['prefix' => 'admin', 'middleware' => 'context', 'context' => 'backend', function() {
    
    // Your contextually loaded routes go here
    
}]); 

你的 BackendServiceProvider 应该看起来像这样

<?php namespace Contextual\Providers;

use Illuminate\Support\ServiceProvider;

class BackendServiceProvider extends ServiceProvider {

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('Your\\Interfaces\\UserRepositoryInterface', 'Your\\Repositories\\Backend\\UserRepository');
        
        // Make more awesome bindings here!
    }
    
}

通过这样做,你在应用程序中定义了自己的上下文,这非常有用,因为你可以确保在最终用户上下文中 永远 不会看到管理上下文中的资源。

注意:默认情况下,后端上下文服务提供者将在 Contextual\Providers 命名空间中加载,你可以在此包提供的配置文件中编辑此设置(《config/context.php》)

上下文门面

如果你愿意,你可以使用此包的 Context 门面动态加载和检查你所在的上下文。

加载上下文

    Context::load('context');

检查当前加载的上下文

    $currentContext = Context::current();