Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
Sanitize
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
3 / 3
3
100.00% covered (success)
100.00%
1 / 1
 apply
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 safe
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 sanitizer
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Celemas\Boiler\Filter;
6
7use Celemas\Boiler\Contract;
8use Override;
9use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
10use Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig;
11
12/** @api */
13final class Sanitize implements Contract\Filter
14{
15    private ?HtmlSanitizer $sanitizer = null;
16
17    #[Override]
18    public function apply(string $value, mixed ...$args): string
19    {
20        return $this->sanitizer()->sanitize($value);
21    }
22
23    #[Override]
24    public function safe(): bool
25    {
26        return true;
27    }
28
29    private function sanitizer(): HtmlSanitizer
30    {
31        return $this->sanitizer ??= new HtmlSanitizer(
32            new HtmlSanitizerConfig()->allowSafeElements(),
33        );
34    }
35}