asm / phpflo-bundle
Requires
- php: >=5.5.9
- phpflo/phpflo: ^1.0
- symfony/symfony: ^2.8 || ^3.0
Requires (Dev)
- mikey179/vfsstream: ~1.0
- phpunit/phpunit: <5.0
This package is auto-updated.
Last update: 2022-02-01 12:59:04 UTC
README
此包基于Henri Bergius的库phpflo,强烈建议您阅读其README。创建此包的目的是为了让symfony等环境更容易集成需要流程编程的phpflo。我不得不重写部分初始Network类,以便通过DIC轻松管理组件。此外,所有组件服务都应定义为"public: false",以避免污染DIC。
安装
您可以通过以下方式添加:
$ composer.phar require phpflo/phpflo-bundle
注意:此需要最小稳定性:dev设置在根级别。否则,您可以先添加phpflo然后添加包。
$ composer.phar require phpflo/phpflo dev-master $ composer.phar require phpflo/phpflo-bundle
这将首先添加具有开发稳定性的phpflo和包。这是由于Composer对间接依赖稳定性的处理方式。
配置
<?php // AppKernel.php // ... $bundles = [ // ... new PhpFlo\PhpFloBundle\PhpFloBundle(), ]; // ...
添加包后,您将有一个新的工厂服务phpflo.network,它使用所有相应标记的服务注册表。另一种可能是使用phpflo.network_di服务。这两个服务之间的区别是:网络使用注册表,组件仅注册一次并在编译时收集。这在需要在请求周期内使用网络且仅构建一次时很有用。如果您正在处理例如长时间运行的过程,则应使用network_di,其中每个组件都会作为新的对象从DIC中检索以构建每个网络。您可以使用以下步骤添加组件
组件类
<?php namespace AppBundle\Component; // AppBundle/Component/ReadFile.php use PhpFlo\Component; use PhpFlo\Port; class ReadFile extends Component { public function __construct() { $this->inPorts()->add('source', ['type' => 'string]); $this->outPorts()->add('out', []); $this->outPorts()->add('error', []; $this->inPorts()->source->on('data', [$this, 'readFile']); } public function readFile($data) { // ... } }
请注意,必须扩展PhpFlo\Component或实现PhpFlo\ComponentInterface!
服务定义(phpflo.network)
# app/config/services.yml services: app.read_file: public: false class: AppBundle\Component\ReadFile tags: - {name: phpflo.component, alias: read_file}
您可以为服务命名,但最重要的是两个标签。它需要一个名为"phpflo.component"的名称,以便在编译器传递期间找到,并且别名将用作图文件的组件名称。
服务定义(phpflo.network_di)
# app/config/services.yml services: app.read_file: lazy: true shared: false # force instantiation class: AppBundle\Component\ReadFile tags: # optional - {name: phpflo.component, alias: read_file}
图文件(app/config/my_graph.json)
{ "properties": { "name": "Count lines in a file" }, "processes": { "ReadFile": { "component": "read_file" }, "SplitbyLines": { "component": "split_str" }, "CountLines": { "component": "counter" }, "Display": { "component": "output" } }, "connections": [ { "src": { "process": "ReadFile", "port": "out" }, "tgt": { "process": "SplitbyLines", "port": "in" } }, { "src": { "process": "ReadFile", "port": "error" }, "tgt": { "process": "Display", "port": "in" } }, { "src": { "process": "SplitbyLines", "port": "out" }, "tgt": { "process": "CountLines", "port": "in" } }, { "src": { "process": "CountLines", "port": "count" }, "tgt": { "process": "Display", "port": "in" } } ] }
构建器将自动在'''app/config'''中搜索提供的图文件 - 如果您需要子目录,您可以将文件名提供为'''subdir/graph.json'''格式。
进程定义(network_di)
{ ... "processes": { "ReadFile": { "component": "app.read_file" }, "SplitbyLines": { "component": "split_str" }, "CountLines": { "component": "counter" }, "Display": { "component": "output" } }, ... }
将服务名称作为组件名称添加!
示例
在symfony控制器中,您可以使用DIC简单创建一个图,如下所示
<?php /** @var \PhpFlo\PhpFloBundle\Flow\Builder $builder */ $network = $this->get('phpflo') ->fromFile('my_graph.json'); $network->getGraph() ->addInitial( $this->getParameter('kernel.root_dir') . '/config/my_graph.json', "ReadFile", "source" );
许可
PhpFloBundle在MIT许可证下发布。有关完整的许可文本,请参阅LICENSE。 自由软件,万岁!