teknoo / recipe
受烹饪的启发,允许创建动态的工作流程,在此称为“食谱”,遵循#east编程并使用中间件,通过DI或任何配置进行配置,如果有一组条件(原料)可用。
Requires
- php: ^8.2
- teknoo/immutable: ^3.0.17
- teknoo/states: ^6.3.0
Requires (Dev)
- behat/behat: ^3.14
- nikic/php-parser: ^4.18||^5
- phpstan/extension-installer: ^1.4.3
- phpstan/phpstan: ^1.12.3
- phpunit/phpunit: ^11.3.5
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.10.2
- symfony/console: ^6.3||^7
- symfony/property-access: ^6.3||^7.0
- dev-master
- 5.1.1
- 5.1.0
- 5.0.2
- 5.0.1
- 5.0.0
- 4.6.1
- 4.6.0
- 4.5.2
- 4.5.1
- 4.5.0
- 4.4.0
- 4.3.0
- 4.2.8
- 4.2.7
- 4.2.6
- 4.2.5
- 4.2.4
- 4.2.3
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.5
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.1
- 4.0.0
- 3.4.5
- 3.4.4
- 3.4.3
- 3.4.2
- 3.4.1
- 3.4.0
- 3.3.0
- 3.2.1
- 3.2.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.4.0
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.1.0-beta5
- 2.1.0-beta4
- 2.1.0-beta3
- 2.1.0-beta2
- 2.1.0-beta1
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-beta7
- 2.0.0-beta5
- 2.0.0-beta4
- 2.0.0-beta3
- 2.0.0-beta2
- 2.0.0-beta1
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.1.0-beta5
- 1.1.0-beta4
- 1.1.0-beta3
- 1.1.0-beta2
- 1.1.0-beta1
- 1.0.2
- 1.0.1
- 1.0.0
- 1.0.0-beta2
- 1.0.0-beta1
This package is auto-updated.
Last update: 2024-09-24 06:50:59 UTC
README
受烹饪的启发,允许创建动态算法,在此称为“食谱”,遵循#east编程并使用中间件,通过DI或任何配置进行配置,如果有一组条件(原料)可用。
完整的文档可以在 文档/README.md 中找到
快速示例
<?php
declare(strict_types=1);
use Teknoo\Recipe\Dish\DishClass;
use Teknoo\Recipe\Ingredient\Ingredient;
use Teknoo\Recipe\Recipe;
use Teknoo\Recipe\Chef;
use Teknoo\Recipe\ChefInterface;
use Teknoo\Recipe\Promise\Promise;
require 'vendor/autoload.php';
$recipe = new Recipe();
$recipe = $recipe->require(
new Ingredient(\DateTime::class, 'date')
);
$recipe = $recipe->cook(
function (\DateTime $date, ChefInterface $chef): void {
$date = $date->setTimezone(new \DateTimeZone('UTC'));
$chef->continue(['date' => $date]);
},
'convertToUTC'
);
$recipe = $recipe->cook(
function (\DateTime $date, ChefInterface $chef): void {
$immutable = \DateTimeImmutable::createFromMutable($date);
$chef->finish($immutable);
},
'immutableDate'
);
$output = '';
$recipe = $recipe->given(
new DishClass(
\DateTimeImmutable::class,
new Promise(
function (\DateTimeImmutable $immutable) use (&$output): void {
$output = $immutable->format('Y-m-d H:i:s T');
},
function (\Throwable $error) use (&$output): void {
$output = $error->getMessage();
}
)
)
);
$chef = new Chef;
$chef->read($recipe);
$chef->process(['date' => new \DateTime('2020-06-27 00:00:00', new \DateTimeZone('Europe/Paris'))]);
//Show : 2020-06-26 22:00:00 UTC
echo $output.PHP_EOL;
其他示例可在演示中找到
完整的文档可以在 文档/README.md 中找到
支持此项目
此项目是免费的,并将保持免费。它完全由EIRL的活动支持。如果您喜欢它并帮助我维护和改进它,请不要犹豫在 Patreon 或 Github 上支持我。
谢谢 :) Richard.
鸣谢
EIRL Richard Déloge - https://deloge.io - 主要开发者。SASU Teknoo Software - https://teknoo.software
关于Teknoo Software
Teknoo Software 是一家PHP软件编辑器,由Richard Déloge创立,作为EIRL Richard Déloge的一部分。Teknoo Software的目标:向我们的合作伙伴和社区提供一系列高质量的服务或软件,分享知识和技能。
许可证
Recipe遵循MIT许可证 - 有关详细信息,请参阅许可证文件夹。
安装和需求
要使用composer安装此库,请运行此命令
composer require teknoo/recipe
此库需要
* PHP 8.1+
* A PHP autoloader (Composer is recommended)
* Teknoo/Immutable.
* Teknoo/States.
Teknoo Recipe 4.0的新闻
此库需要PHP 8.1或更高版本。一些更改导致bc中断。
- 为不可变对象使用只读属性。
- 常量
BowlInterface::METHOD_NAME
是最终的。 - 支持
Fiber
在Promise
中。 - 通过动态类支持
Fiber
在Bowl
和DynamicBowl
中- 可调用将自动被一个fiber包装
- fiber对象将作为参数传递给bowls。
- 将
Fiber
支持添加到RecipeBowl,也在一个专门的类FiberRecipeBowl
中。工作计划也将传递Fiber实例。 - 添加
CookingSupervisorInterface
和其默认实现CookingSupervisor
以管理Bowls Fibers的执行并循环每个活动fiber。CookingSupervisor
也作为参数传递给bowls。
Teknoo Recipe 3.1的新闻
此库需要PHP 8.0或更高版本。
- 添加
MergeableInterface
和ChefInterface::merge()
以允许合并原料而不是用updateWorkplan
替换它,而无需在步骤中检索它。 - 添加
TransformableInterface
和属性Transform
以允许在将原料放入碗中之前对其进行转换
Teknoo Recipe 3.0的新闻
此库需要PHP 8.0或更高版本。一些更改导致bc中断。
- 在变量分配之前执行Promise不可变检查
- 对数组函数进行一些优化以限制O(n)
- 执行嵌入式菜谱的副厨师从工作计划继承错误处理器,但可以修改而不影响主厨师中的原始处理器。
- 副厨师在发生错误时也会调用其顶级厨师的上报错误方法
- 添加
interruptCooking
方法以停止厨师执行,而无需执行最终步骤(菜肴验证或错误处理器) - 添加
stopErrorReporting
方法以停止向顶级厨师报告错误
来自Teknoo Recipe 2.0的消息
此库需要PHP 7.4或更高版本。一些更改会导致bc中断
- PHP 7.4是最低要求
- 大多数方法都已更新,在适用的情况下包含类型提示。请检查您的扩展点以确保函数签名正确。
- 切换到类型属性 _ 所有文件使用严格类型。请确保不要依赖于类型强制转换。
- 对于整数索引数组,用"..."运算符替换array_merge
- 删除一些无用的PHP DockBlocks
- 在QA工具中启用PHPStan并禁用PHPMd
- 启用PHPStan扩展以支持Stated类
贡献 :)
欢迎您为此项目做出贡献。 在Github上Fork它