rtroncoso / laravel-context
根据上下文绑定服务提供者
Requires
- php: >=5.4.0
- illuminate/support: 5.1.*
Requires (Dev)
- benconstable/phpspec-laravel: ~2.0
- orchestra/testbench: 3.1.*
- phpspec/phpspec: ^2.2
- phpunit/phpunit: ^4.6
This package is not auto-updated.
Last update: 2024-09-14 18:09:28 UTC
README
这个简单而强大的包可以帮助你根据上下文加载不同的服务提供者。上下文可以通过路由组的 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();