teknoo/recipe

受烹饪的启发,允许创建动态的工作流程,在此称为“食谱”,遵循#east编程并使用中间件,通过DI或任何配置进行配置,如果有一组条件(原料)可用。


README

Latest Stable Version Latest Unstable Version Total Downloads License PHPStan

受烹饪的启发,允许创建动态算法,在此称为“食谱”,遵循#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的活动支持。如果您喜欢它并帮助我维护和改进它,请不要犹豫在 PatreonGithub 上支持我。

谢谢 :) 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 是最终的。
  • 支持 FiberPromise 中。
  • 通过动态类支持 FiberBowlDynamicBowl
    • 可调用将自动被一个fiber包装
    • fiber对象将作为参数传递给bowls。
  • Fiber 支持添加到RecipeBowl,也在一个专门的类 FiberRecipeBowl 中。工作计划也将传递Fiber实例。
  • 添加 CookingSupervisorInterface 和其默认实现 CookingSupervisor 以管理Bowls Fibers的执行并循环每个活动fiber。CookingSupervisor 也作为参数传递给bowls。

Teknoo Recipe 3.1的新闻

此库需要PHP 8.0或更高版本。

  • 添加 MergeableInterfaceChefInterface::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它