This bundle integrates RulerZ into Symfony.
Require the bundle:
composer require 'kphoen/rulerz-bundle'
And declare it into your app/AppKernel.php
file:
public function registerBundles()
{
return array(
// ...
new KPhoen\RulerZBundle\KPhoenRulerZBundle(),
);
}
This bundle registers a rulerz
service which is an instance of RulerZ\RulerZ
.
$rulerz = $this->container->get('rulerz');
$rulerz->filter(/* ... */);
See RulerZ's documentation for more information.
Custom operators can be added to RulerZ executors. The bundle provide a way to register new operators directly from the container, you just need to tag a service:
services:
operator.array.like:
class: RulerZ\Operator\ArrayExecutor\Like
tags:
- { name: rulerz.operator, target: native, operator: like }
In addition to the rulerz.operator
tag, two other values are needed:
target
: the compilation target we want to register the operator for ;operator
: the name that will be given to the operator in rules.
Important: Operators registered as classes must implement the __invoke
magic method as RulerZ expects custom operators to be defined as callable.
A rule validator is provided by the bundle. In its simplest form, it will only validate the syntax of a given rule. Unknown variables or operators won't be detected unless you define a whitelist of accepted values.
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\RulerZ\Validator\Constraints as RulerZAssert;
class TaggingRule
{
/**
* @var string
*
* @Assert\NotBlank()
* @RulerZAssert\ValidRule(
* allowed_variables={"title", "url", "isArchived", "isStared", "content", "language", "mimetype", "readingTime", "domainName"},
* allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or"}
* )
*/
private $rule;
}
# app/config/config.yml
rulerz:
cache: "%kernel.cache_dir%/rulerz"
debug: "%kernel.debug%"
targets:
native: false
doctrine: false
doctrine_dbal: false
eloquent: false
pomm: false
solarium: false
elasticsearch: false
The targets
section allows you to enable only the compilation targets needed
by your application.
This bundle is under the MIT licence.