...

Recipe

Inspiré par la cuisine, permet la création de "WorkFlows" dynamiques.


Lier composants entre eux pour implémenter un workflow et résoudre un problème sans avoir à en écrire du code, tout en permettant de le compléter par des modules supplémentaires.

Un workflow créé via une "recipe" est composé de

  • Des ingrédients
  • Des actions, "cuisinés" dans un saladier ("bowl")
  • Un plat final attendu

La bibliothèque "East Foundation" est basé sur "Recipe" pour gérer le workflow dédié au traitement des requêtes HTTP et permettre aux développeurs de le compléter en ajoutant des middlewares pour support par exemple les sessions ou les traductions..

...

Fonctionnalités


Vérification des entrées

Afin d'éviter d'éventuelles erreurs durant l'exécution.

Définition dynamique

Créer, compléter et ordonner les tâches au runtime.

Immutable

Chaque modification créée un nouveau workflow.

PSR 11

Compatible avec la PSR-11, livré avec PHP DI.

GitHub


Fork le project sur GitHub

Il est sous licence open source! Il est hébergé, développé et maintenu sur GitHub par des contributeurs comme vous.


Voir le projet sur GitHub

Exemple



<?php

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 $dateChefInterface $chef) {
        
$date $date->setTimezone(new \DateTimeZone('UTC'));

        
$chef->continue(['date' => $date]);
    },
    
'convertToUTC'
);

$recipe $recipe->cook(
    function (\
DateTime $dateChefInterface $chef) {
        
$immutable = \DateTimeImmutable::createFromMutable($date);

        
$chef->finish($immutable);
    },
    
'immutableDate'
);

$output '';
$recipe $recipe->given(
    new 
DishClass(
        \
DateTimeImmutable::class,
        new 
Promise(
            function (\
DateTimeImmutable $immutable) use (&$output) {
                
$output $immutable->format('Y-m-d H:i:s T');
            },
            function (\
Throwable $error) use (&$output) {
                
$output $error->getMessage();
            }
        )
    )
);

$chef = new Chef;
$chef->read($recipe);
$chef->process(['date' => new \DateTime('2017-12-25 00:00:00', new \DateTimeZone('Europe/Paris'))]);
echo 
$output.PHP_EOL;
//Output : 2017-12-24 23:00:00 UTC