Skip to content

Commit

Permalink
Add laminas input filter
Browse files Browse the repository at this point in the history
  • Loading branch information
loco8878 committed Sep 16, 2024
1 parent bf3a7c0 commit c8205db
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 1 deletion.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@
"symfony/http-kernel": "^3.4 || ^4.3 || ^5.0 || ^6.0",
"symfony/phpunit-bridge": "^5.4 || ^6.0",
"twig/twig": "^2.12.1 || ~3.0",
"laminas/laminas-view": "~2.9"
"laminas/laminas-view": "~2.9",
"laminas/laminas-inputfilter": "~2.30"
},
"autoload": {
"psr-4": {
Expand Down
56 changes: 56 additions & 0 deletions src/Bridge/Laminas/SlugifyFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace Cocur\Slugify\Bridge\Laminas;

use Cocur\Slugify\Slugify;
use Laminas\Filter\AbstractFilter;

/**
* Class SlugifyFilter
*
* @package cocur/slugify
* @subpackage bridge
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
class SlugifyFilter extends AbstractFilter
{
/**
* @var array
* @see Slugify::$options
*/
protected $options = [
'regexp' => Slugify::LOWERCASE_NUMBERS_DASHES,
'separator' => '-',
'lowercase' => true,
'lowercase_after_regexp' => false,
'trim' => true,
'strip_tags' => false
];

/**
* @param array|null $options
*/
public function __construct(?array $options = null)
{
if (!empty($options)) {
$this->setOptions($options);
}
}

/**
* Returns the result of filtering $value
*
* @param mixed $value
*
* @return mixed
*/
public function filter($value)
{
if (!empty($value)) {
$slugify = new Slugify($this->options);
return $slugify->slugify((string) $value);
}

return $value;
}
}
73 changes: 73 additions & 0 deletions tests/Bridge/Laminas/SlugifyFilterTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php

namespace Cocur\Slugify\Tests\Bridge\Laminas;

use Cocur\Slugify\Bridge\Laminas\SlugifyFilter;

use Laminas\Filter\FilterChain;
use Laminas\InputFilter\Input;
use Mockery\Adapter\Phpunit\MockeryTestCase;

/**
* Class SlugifyFilterTest
*
* @package cocur/slugify
* @subpackage bridge
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
class SlugifyFilterTest extends MockeryTestCase
{
/** @var Input */
protected Input $input;

protected function setUp(): void
{
$this->input = new Input('');
}

/**
* @covers \Cocur\Slugify\Bridge\Laminas\SlugifyFilter::filter()
*/
public function testSlugifyFilterWithoutCustomOptions()
{
$chain = new FilterChain(
[
'filters' => [
[
'name' => SlugifyFilter::class,
],
],
]
);
$this->input->setFilterChain($chain);
$this->input->setValue('foo Bar');

$this->assertSame('foo-bar', $this->input->getValue());

}

/**
* @covers \Cocur\Slugify\Bridge\Laminas\SlugifyFilter::filter()
*/
public function testSlugifyFilterWithCustomOptions()
{
$chain = new FilterChain(
[
'filters' => [
[
'name' => SlugifyFilter::class,
'options' => [
'regexp' => '/([^0-9test\/]|-)+/',
'strip_tags' => false,
]
],
],
]
);
$this->input->setFilterChain($chain);
$this->input->setValue('0123 foo bar <test>');

$this->assertSame('0123-test', $this->input->getValue());
}

}

0 comments on commit c8205db

Please sign in to comment.