eilander / gateway
Laravel 5网关生成器包。
v5.6.0
2018-02-09 07:15 UTC
Requires
- php: >=5.5.9
- laravel/framework: >=5.1
README
网关模式的Laravel实现
A gateway encapsulates the semantic gap between the object-oriented domain layer and the relation-oriented persistence layer.
进一步阅读: http://ryantablada.com/post/two-design-patterns-that-will-make-your-applications-better
目录
[目录]
使用方法
步骤 1:添加服务提供者
在你的 config/app.php
中,将 Eilander\Repository\Providers\RepositoryServiceProvider:class
添加到 providers
数组的末尾
<?php
'providers' => [
...
Eilander\Gateway\Providers\GatewayServiceProvider::class,
],
步骤 2:将包添加到 composer.json 以进行自动加载
将包添加到主 composer.json
中以进行自动加载,然后运行 composer dump-autoload
,如下所示
<?php
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Eilander\\Gateway\\": "../library/eilander/gateway/src/"
}
},
#!json
composer dump-autoload
控制器示例
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Gateways\ProductGateway as Gateway;
class ProductController extends Controller
{
/**
* @var VodafoneGateway
*/
protected $gateway;
public function __construct(Gateway $gateway){
$this->gateway = $gateway;
}
public funcion create() {
return $this->gateway->createProduct();
}
....
}
网关示例
<?php
namespace App\Gateways;
use Illuminate\Http\Request;
class TestGateway {
public function __construct(Request $request)
{
$this->request = $request;
}
public function createProduct()
{
// some validation
...
// screate new product
$product = App\Product::create($this->request->all());
}
}
网关类型
Laravel的eloquent(单个和多个)网关已包括在内。还包括一个空的Elasticsearch网关。
演示者
演示者作为对象的包装器和渲染器。
Fractal演示者
需要Fractal。
使用方法
创建转换器
use League\Fractal\TransformerAbstract;
class PostTransformer extends TransformerAbstract
{
public function transform(\Post $post)
{
return [
'id' => (int) $post->id,
'title' => $post->title,
'content' => $post->content
];
}
}
创建演示者
use Eilander\Gateway\Presenter\FractalPresenter;
class PostPresenter extends FractalPresenter {
/**
* Prepare data to present
*
* @return \League\Fractal\TransformerAbstract
*/
public function getTransformer()
{
return new PostTransformer();
}
}
在网关中启用
<?php
namespace App\Gateways\Eloquent;
use App\Gateways\Eloquent\Contracts\GebruikerGateway as Gateways;
use App\Repositories\Eloquent\Contracts\GebruikerRepository as Repository;
use App\Validators\GebruikerValidator as Validator;
use Eilander\Gateway\Eloquent\EloquentGateway;
use App\Presenters\GebruikerPresenter as Presenter;
/**
* Class FruitRepository
*/
class GebruikerGateway extends EloquentGateway implements Gateways {
{
...
public function presenter()
{
return Presenter::class;
}
}
跳过网关中定义的演示者
在所有其他链式方法之前使用 skipPresenter
$posts = $this->gateway->skipPresenter()->all();