On the GitHub blog they announce a RubyGem called html-pipeline.
Which is a more or less simple way to have a collection of filters applied on a string or dom document.
The goal is to port this behaviour in PHP. It is not completely possible because Ruby have class identifiers which they call
new
on when appleing the filters (a form of lazy loading).
- Currently a
FilterInterface
only takes a string value and must return a string aswell. ChainFilter
must get all filters in the constructor as instantiated objects. This could be fixed by adding a wrapper that knows how to get a Filter by its name.- The is only a single Filter.
Usage is simple.
<?php
use Vandpibe\Filtering\FilterChain;
use Vandpibe\Filtering\Filter\AutolinkFilter;
$chain = new FilterChain(array(
new AutolinkFilter,
));
$text = $chain->filter('<p>"http://github.com"</p>', array());
// <p>"<a href="http://github.com">http://github.com</a>"</p>
print $text;
A FilterChain
supports a resolve
method that will take the filter input and try and match it to a real FilterInterface
implementation.
There is currently only a implementation for Symfony's DependencyInjection component.
<?php
use Vandpibe\Filtering\LazyFilterChain;
$chain = new LazyFilterChain(array(
'some.service.id',
'some.other.service.id',
));
$chain->setContainer($container);
$text = $chain->filter('mytext', array('context' => true));
- OptionsResolver
- PHPSpec2 For testing.
- DependencyInjection For the LazyChainFilter.