Skip to content

Commit e7505e6

Browse files
Remove Slugify Method (#1506)
* Remove Slugify Method * Remove usage of slugify method
1 parent 5abc240 commit e7505e6

File tree

13 files changed

+31
-185
lines changed

13 files changed

+31
-185
lines changed

docs/reference/advanced_configuration.rst

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ Full configuration options:
3333
# Defaults:
3434
- /(.*)admin(.*)/
3535
- /^_(.*)/
36-
slugify_service: sonata.page.slugify.cocur
3736
ignore_uri_patterns:
3837
# Default:
3938
- /admin(.*)/

docs/reference/installation.rst

-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ SonataPageBundle Configuration
9191
# config/packages/sonata_page.yaml
9292
9393
sonata_page:
94-
slugify_service: sonata.page.slugify.cocur
9594
multisite: host
9695
use_streamed_response: true # set the value to false in debug mode or if the reverse proxy does not handle streamed response
9796
ignore_route_patterns:

src/DependencyInjection/Configuration.php

-11
Original file line numberDiff line numberDiff line change
@@ -112,17 +112,6 @@ public function getConfigTreeBuilder(): TreeBuilder
112112
])
113113
->prototype('scalar')->end()
114114
->end()
115-
->scalarNode('slugify_service')
116-
// NEXT_MAJOR: reword this info message
117-
->info('You should use: sonata.page.slugify.cocur, but for BC we keep \'sonata.core.slugify.native\' as default')
118-
->defaultValue('sonata.page.slugify.cocur')
119-
->setDeprecated(
120-
...$this->getDeprecationMessage(
121-
'The "slugify_service" option is deprecated since sonata-project/page-bundle 3.28 and will be removed in 4.0. Use decoration of services instead.',
122-
'3.x'
123-
)
124-
)
125-
->end()
126115
->arrayNode('ignore_routes')
127116
->defaultValue([])
128117
->prototype('scalar')->end()

src/DependencyInjection/SonataPageExtension.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ public function load(array $configs, ContainerBuilder $container): void
8383
$this->configurePageServices($container, $config);
8484

8585
$container->setParameter('sonata.page.assets', $config['assets']);
86-
$container->setParameter('sonata.page.slugify_service', $config['slugify_service']);
8786

8887
$container->setParameter('sonata.page.skip_redirection', $config['skip_redirection']);
8988
$container->setParameter('sonata.page.hide_disabled_blocks', $config['hide_disabled_blocks']);
@@ -121,14 +120,14 @@ public function configurePageDefaults(ContainerBuilder $container, array $config
121120
];
122121

123122
$container->getDefinition('sonata.page.manager.page')
124-
->replaceArgument(2, $defaults);
123+
->replaceArgument(3, $defaults);
125124

126125
foreach ($config['page_defaults'] as $name => $pageDefaults) {
127126
$config['page_defaults'][$name] = array_merge($defaults, $pageDefaults);
128127
}
129128

130129
$container->getDefinition('sonata.page.manager.page')
131-
->replaceArgument(3, $config['page_defaults']);
130+
->replaceArgument(4, $config['page_defaults']);
132131
}
133132

134133
/**

src/Entity/PageManager.php

+20-7
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,46 @@
1313

1414
namespace Sonata\PageBundle\Entity;
1515

16+
use Cocur\Slugify\SlugifyInterface;
1617
use Doctrine\Persistence\ManagerRegistry;
1718
use Sonata\Doctrine\Entity\BaseEntityManager;
18-
use Sonata\PageBundle\Model\Page;
1919
use Sonata\PageBundle\Model\PageInterface;
2020
use Sonata\PageBundle\Model\PageManagerInterface;
2121
use Sonata\PageBundle\Model\SiteInterface;
2222

2323
/**
24-
* This class manages PageInterface persistency with the Doctrine ORM.
25-
*
2624
* @extends BaseEntityManager<PageInterface>
2725
*
2826
* @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
2927
*/
3028
final class PageManager extends BaseEntityManager implements PageManagerInterface
3129
{
30+
private SlugifyInterface $slugify;
31+
32+
/**
33+
* @var array<string, mixed>
34+
*/
3235
private array $pageDefaults;
3336

37+
/**
38+
* @var array<string, mixed>
39+
*/
3440
private array $defaults;
3541

3642
/**
37-
* @param string $class
43+
* @param array<string, mixed> $defaults
44+
* @param array<string, mixed> $pageDefaults
3845
*/
39-
public function __construct($class, ManagerRegistry $registry, array $defaults = [], array $pageDefaults = [])
40-
{
46+
public function __construct(
47+
string $class,
48+
ManagerRegistry $registry,
49+
SlugifyInterface $slugify,
50+
array $defaults = [],
51+
array $pageDefaults = []
52+
) {
4153
parent::__construct($class, $registry);
4254

55+
$this->slugify = $slugify;
4356
$this->defaults = $defaults;
4457
$this->pageDefaults = $pageDefaults;
4558
}
@@ -86,7 +99,7 @@ public function fixUrl(PageInterface $page): void
8699
// make sure Page has a valid url
87100
if ($page->getParent()) {
88101
if (!$page->getSlug()) {
89-
$page->setSlug(Page::slugify($page->getName()));
102+
$page->setSlug($this->slugify->slugify($page->getName()));
90103
}
91104

92105
if ('/' === $page->getParent()->getUrl()) {

src/Model/Page.php

+1-52
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,6 @@ abstract class Page implements PageInterface
168168
*/
169169
protected $edited;
170170

171-
/**
172-
* @var \Closure|null
173-
*/
174-
protected static $slugifyMethod;
175-
176171
public function __construct()
177172
{
178173
$this->blocks = new ArrayCollection();
@@ -187,16 +182,6 @@ public function __toString()
187182
return $this->getName() ?: '-';
188183
}
189184

190-
public static function getSlugifyMethod()
191-
{
192-
return self::$slugifyMethod;
193-
}
194-
195-
public static function setSlugifyMethod(\Closure $slugifyMethod): void
196-
{
197-
self::$slugifyMethod = $slugifyMethod;
198-
}
199-
200185
public function setId($id): void
201186
{
202187
$this->id = $id;
@@ -258,7 +243,7 @@ public function getName()
258243

259244
public function setSlug($slug): void
260245
{
261-
$this->slug = self::slugify(trim((string) $slug));
246+
$this->slug = $slug;
262247
}
263248

264249
public function getSlug()
@@ -546,42 +531,6 @@ public function getUrl()
546531
return $this->url;
547532
}
548533

549-
/**
550-
* source : http://snipplr.com/view/22741/slugify-a-string-in-php/.
551-
*
552-
* @static
553-
*
554-
* @param string $text
555-
*
556-
* @return mixed|string
557-
*/
558-
public static function slugify($text)
559-
{
560-
// this code is for BC
561-
if (!self::$slugifyMethod) {
562-
// replace non letter or digits by -
563-
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
564-
565-
// trim
566-
$text = trim($text, '-');
567-
568-
// transliterate
569-
if (\function_exists('iconv')) {
570-
$text = iconv('UTF-8', 'ASCII//TRANSLIT', $text);
571-
}
572-
573-
// lowercase
574-
$text = strtolower($text);
575-
576-
// remove unwanted characters
577-
$text = preg_replace('~[^\\-\w]+~', '', $text);
578-
579-
return $text;
580-
}
581-
582-
return \call_user_func(self::$slugifyMethod, $text);
583-
}
584-
585534
/**
586535
* Retrieve a block by code.
587536
*

src/Resources/config/orm.xml

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<service id="sonata.page.manager.page" class="%sonata.page.manager.page.class%" public="true">
1818
<argument>%sonata.page.page.class%</argument>
1919
<argument type="service" id="doctrine"/>
20+
<argument type="service" id="sonata.page.slugify.cocur"/>
2021
<argument/>
2122
<argument/>
2223
</service>

src/SonataPageBundle.php

-18
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,4 @@ public function build(ContainerBuilder $container): void
3333
$container->addCompilerPass(new CmfRouterCompilerPass());
3434
$container->addCompilerPass(new TwigStringExtensionCompilerPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 1);
3535
}
36-
37-
public function boot(): void
38-
{
39-
$container = $this->container;
40-
$class = $this->container->getParameter('sonata.page.page.class');
41-
42-
if (!class_exists($class)) {
43-
// we only set the method if the class exist
44-
return;
45-
}
46-
47-
\call_user_func([$class, 'setSlugifyMethod'], static function ($text) use ($container) {
48-
$id = $container->getParameter('sonata.page.slugify_service');
49-
$service = $container->get($id);
50-
51-
return $service->slugify($text);
52-
});
53-
}
5436
}

tests/App/config/sonata.yaml

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ sonata_block:
77
default_contexts: [sonata_page_bundle]
88

99
sonata_page:
10-
slugify_service: sonata.page.slugify.cocur
1110
multisite: host
1211
use_streamed_response: false
1312

tests/DependencyInjection/ConfigurationTest.php

-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ public function testPageWithMatrix(): void
115115
0 => '(.*)admin(.*)',
116116
1 => '^_(.*)',
117117
],
118-
'slugify_service' => 'sonata.page.slugify.cocur',
119118
'ignore_routes' => [
120119
],
121120
'ignore_uri_patterns' => [
@@ -185,7 +184,6 @@ public function testPageWithoutMatrix(): void
185184
0 => '(.*)admin(.*)',
186185
1 => '^_(.*)',
187186
],
188-
'slugify_service' => 'sonata.page.slugify.cocur',
189187
'ignore_routes' => [
190188
],
191189
'ignore_uri_patterns' => [

tests/Entity/PageManagerTest.php

+7-5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace Sonata\PageBundle\Tests\Entity;
1515

16+
use Cocur\Slugify\Slugify;
1617
use Doctrine\Persistence\ManagerRegistry;
1718
use PHPUnit\Framework\TestCase;
1819
use Sonata\PageBundle\Entity\PageManager;
@@ -23,9 +24,9 @@ final class PageManagerTest extends TestCase
2324
public function testFixUrl(): void
2425
{
2526
$manager = new PageManager(
26-
'Foo\Bar',
27-
$this->createMock(ManagerRegistry::class),
28-
[]
27+
Page::class,
28+
$this->createStub(ManagerRegistry::class),
29+
new Slugify()
2930
);
3031

3132
$page1 = new Page();
@@ -67,9 +68,9 @@ public function testFixUrl(): void
6768
public function testWithSlashAtTheEnd(): void
6869
{
6970
$manager = new PageManager(
70-
'Foo\Bar',
71+
Page::class,
7172
$this->createMock(ManagerRegistry::class),
72-
[]
73+
new Slugify()
7374
);
7475

7576
$homepage = new Page();
@@ -96,6 +97,7 @@ public function testCreateWithGlobalDefaults(): void
9697
$manager = new PageManager(
9798
Page::class,
9899
$this->createMock(ManagerRegistry::class),
100+
new Slugify(),
99101
[],
100102
['my_route' => ['decorate' => false, 'name' => 'Salut!']]
101103
);

tests/Model/PageTest.php

-17
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,6 @@
1919

2020
final class PageTest extends TestCase
2121
{
22-
public function testSlugify(): void
23-
{
24-
setlocale(\LC_ALL, 'en_US.utf8');
25-
26-
$reflectionClass = new \ReflectionClass(Page::class);
27-
$property = $reflectionClass->getProperty('slugifyMethod');
28-
$property->setAccessible(true);
29-
$property->setValue(null);
30-
31-
static::assertSame(Page::slugify('test'), 'test');
32-
static::assertSame(Page::slugify('S§!@@#$#$alut'), 's-alut');
33-
static::assertSame(Page::slugify('Symfony2'), 'symfony2');
34-
static::assertSame(Page::slugify('test'), 'test');
35-
static::assertSame(Page::slugify('c\'est bientôt l\'été'), 'c-est-bientot-l-ete');
36-
static::assertSame(Page::slugify(urldecode('%2Fc\'est+bientôt+l\'été')), 'c-est-bientot-l-ete');
37-
}
38-
3922
public function testHeader(): void
4023
{
4124
$expectedHeaders = [

tests/SonataPageBundleTest.php

-67
This file was deleted.

0 commit comments

Comments
 (0)