ellipse / resolvers-composite
此包已被废弃且不再维护。未建议替代包。
ellipse框架的复合解析器组件
dev-master / 1.0.x-dev
2017-07-27 13:56 UTC
Requires
- php: >=7.1
- ellipse/contracts-resolver: ^1.0
- http-interop/http-middleware: ^0.4.0
Requires (Dev)
- mockery/mockery: ^1.0-alpha
- peridot-php/leo: ^1.6
- peridot-php/peridot: ^1.19
This package is not auto-updated.
Last update: 2017-08-01 12:39:50 UTC
README
此包提供了一种 组合中间件解析器。
它允许将多个解析器组合为一个解析器,与 ellipse中间件分发器 一起使用。
要求 php >= 7.1
安装 composer require ellipse/resolvers-composite
运行测试 ./vendor/bin/peridot tests
组合两个解析器
此包提供了一个 Ellipse\Resolvers\CompositeResolver
类,它是 Ellipse\Contracts\Resolver\ResolverInterface
接口的一个实现,接受两个 ResolverInterface
实例作为参数。生成的组合解析器将首先尝试将值解析为中间件,如果第一个失败,将尝试第二个。这允许组合任意数量的解析器。
<?php use Ellipse\Resolvers\CompositeResolver; use App\Resolvers\SomeResolver; use App\Resolvers\SomeOtherResolver; use App\Resolvers\YetSomeOtherResolver; $resolver1 = new SomeResolver; $resolver2 = new SomeOtherResolver; $resolver = new CompositeResolver($resolver1, $resolver2); // This dispatcher will use SomeResolver and SomeOtherResolver to resolve values as middleware. $dispatcher = new Dispatcher(['element'], $resolver); // Composite resolvers can be combined as well. $resolver = new CompositeResolver($resolver, new YetSomeOtherResolver); // This dispatcher will use SomeResolver, SomeOtherResolver and AgainSomeOtherResolver to resolve elements // as middleware. $dispatcher = new Dispatcher(['element'], $resolver);
如果您想创建一个提供解析器的包,并自动将您的解析器与容器已提供的解析器组合,您可以编写一个 interop服务提供者,定义一个组合解析器,并将您的解析器作为第二个参数。这是ellipse解析器使用的方法。
<?php namespace My\Package; use Interop\Container\ServiceProvider; use Ellipse\Contracts\Resolver\ResolverInterface; use Ellipse\Resolvers\CompositeResolver; class MyPackageServiceProvider implements ServiceProvider { public function getServices() { return [ MyResolver::class => function ($container) { // Construct an instance of MyResolver and returns it. }, ResolverInterface::class => function ($container, $previous = null) { $resolver = $container->get(MyResolver::class); return ! is_null($previous) ? new CompositeResolver($previous(), $resolver) : $resolver; }, ]; } }