1. Go to this page and download the library: Download uuf6429/rune library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
uuf6429 / rune example snippets
namespace MyApplication;
use uuf6429\Rune\Action\CallbackAction;
use uuf6429\Rune\Context\ClassContext;
use uuf6429\Rune\Engine;
use uuf6429\Rune\Rule\GenericRule;
use uuf6429\Rune\Rule\RuleInterface;
// A class whose instances will be available inside the rule engine.
class Product
{
public function __construct(
public readonly string $name,
public readonly string $colour,
) {
}
}
// A class that represents the rule engine execution context.
// Note that public properties will be available in the rule expressions,
// in this case rules will have access to "product" as a variable (and all of product's public properties).
class ProductContext extends ClassContext
{
public function __construct(
public readonly Product $product
) {
}
}
// Declare an action to be triggered when a rule matches against a product.
$action = new CallbackAction(
static fn ($eval, ProductContext $context, RuleInterface $rule) => printf(
"Rule %s triggered for %s %s\n",
$rule->getId(),
ucwords($context->product->colour),
$context->product->name
)
);
// Declare some sample rules.
$rules = [
new GenericRule(1, 'Red Products', 'product.colour == "red"', $action),
new GenericRule(2, 'Red Socks', 'product.colour == "red" and product.name matches "/socks/i"', $action),
new GenericRule(3, 'Green Socks', 'product.colour == "green" and product.name matches "/socks/i"', $action),
new GenericRule(4, 'Socks', 'product.name matches "/socks/" > 0', $action),
];
// Declare available products (to run rules against).
$products = [
new Product('Bricks', 'red'),
new Product('Soft Socks', 'green'),
new Product('Sporty Socks', 'yellow'),
];
// Create rule engine.
$engine = new Engine();
// Run rules for each product. Note that each product should exist in a separate context.
foreach ($products as $product) {
$engine->execute(new ProductContext($product), $rules);
}
mermaid
flowchart LR
A("
<center><b>Rules</b></center>
Rule 1:
- Condition: <code>product.color == #quot;green#quot;</code>
- Action: <code>applyDiscount(10)</code>
Rule 2:
- Condition: <code>product.color == #quot;red#quot;</code>
- Action: <code>applyDiscount(20)</code>
") --> C
B("
<center><b>Context</b></center><pre><code>{
product: {
name: #quot;Scarf#quot;,
color: #quot;red#quot;
}
}</code></pre>
") --> C
subgraph RuleEngine ["<br><h2>Rule Engine</h2>"]
C{"Filter Rules"} --> D(["Execute Action(s)"])
end
D --> E("<code>applyDiscount(20)</code>")
style A text-align: left
style B text-align: left
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.