Skip to content

Latest commit

 

History

History
55 lines (38 loc) · 1.6 KB

filter_factory.md

File metadata and controls

55 lines (38 loc) · 1.6 KB
title
The filter factory

The filter factory

Each filtrator object uses individuals filters which are constructed by a FilterFactory. The filtrator depends on the filter factory but if you don't provide it, one will be constructed for your

use Sirius\Filtration\Filtrator;
use Sirius\Filtration\FilterFactory;

$filterFactory = new FilterFactory();
$filtrator = new Filtrator($filterFactory);

You can register your custom filters within the FilterFactory like so:

$filterFactory->register('my_filter', 'MyApp\Filtration\Filter\MyFilter');

If you use dependency injection (and you should) you can have a single filter factory for your entire application and register all the filters you need at the beginning of the app.

If you don't want to do that you can always pass the class to the filtrator:

$filtrator->add('content', 'MyApp\Filtration\Filter\MyFilter');

Also, if your filters are very complex, that is they have dependencies) you need to extend the filter factory.

namespace MyApp\Filtration;

class FilterFactory extends Sirius\Filtration\FilterFactory {
    
    $protected $container = $container;

    function __construct(Container $container) {
        $this->container = $container;
    }
    
    function createFilter($callbackOrFilterName, $options = null, $resursive = false) {
        $filter = $this->container->get($callbackOrFilterName, [$options, $recursive]);
        if (!$filter) {
            $filter = parent::createFilter($callbackOrFilterName, $options, $resursive)
        }
        return $filter;
    }
    
}

Or something to that extent.