Skip to content

Commit df4fa70

Browse files
committed
[Mime] added the component
1 parent 8a4c162 commit df4fa70

File tree

7 files changed

+110
-2
lines changed

7 files changed

+110
-2
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
13+
14+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Component\DependencyInjection\Reference;
17+
18+
/**
19+
* Registers custom mime types guessers.
20+
*
21+
* @author Fabien Potencier <[email protected]>
22+
*/
23+
class AddMimeTypeGuesserPass implements CompilerPassInterface
24+
{
25+
/**
26+
* {@inheritdoc}
27+
*/
28+
public function process(ContainerBuilder $container)
29+
{
30+
if ($container->has('mime_types')) {
31+
$definition = $container->findDefinition('mime_types');
32+
foreach ($container->findTaggedServiceIds('mime.mime_type_guesser', true) as $id => $attributes) {
33+
$definition->addMethodCall('registerGuesser', array(new Reference($id)));
34+
}
35+
}
36+
}
37+
}

DependencyInjection/FrameworkExtension.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
7474
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
7575
use Symfony\Component\Messenger\Transport\TransportInterface;
76+
use Symfony\Component\Mime\MimeTypes;
77+
use Symfony\Component\Mime\MimeTypeGuesserInterface;
7678
use Symfony\Component\PropertyAccess\PropertyAccessor;
7779
use Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface;
7880
use Symfony\Component\PropertyInfo\PropertyDescriptionExtractorInterface;
@@ -310,6 +312,10 @@ public function load(array $configs, ContainerBuilder $container)
310312
'Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController',
311313
]);
312314

315+
if (class_exists(MimeTypes::class)) {
316+
$loader->load('mime_type.xml');
317+
}
318+
313319
$container->registerForAutoconfiguration(Command::class)
314320
->addTag('console.command');
315321
$container->registerForAutoconfiguration(ResourceCheckerInterface::class)
@@ -374,6 +380,8 @@ public function load(array $configs, ContainerBuilder $container)
374380
->addTag('messenger.message_handler');
375381
$container->registerForAutoconfiguration(TransportFactoryInterface::class)
376382
->addTag('messenger.transport_factory');
383+
$container->registerForAutoconfiguration(MimeTypeGuesserInterface::class)
384+
->addTag('mime.mime_type_guesser');
377385
$container->registerForAutoconfiguration(LoggerAwareInterface::class)
378386
->addMethodCall('setLogger', [new Reference('logger')]);
379387

FrameworkBundle.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddAnnotationsCachedReaderPass;
1515
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddDebugLogProcessorPass;
16+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddMimeTypeGuesserPass;
1617
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddExpressionLanguageProvidersPass;
1718
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ContainerBuilderDebugDumpPass;
1819
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
@@ -72,6 +73,11 @@ public function boot()
7273
if ($trustedHosts = $this->container->getParameter('kernel.trusted_hosts')) {
7374
Request::setTrustedHosts($trustedHosts);
7475
}
76+
77+
if ($this->container->has('mime_types')) {
78+
$mt = $this->container->get('mime_types');
79+
$mt->setDefault($mt);
80+
}
7581
}
7682

7783
public function build(ContainerBuilder $container)
@@ -118,6 +124,7 @@ public function build(ContainerBuilder $container)
118124
$container->addCompilerPass(new ResettableServicePass());
119125
$container->addCompilerPass(new TestServiceContainerWeakRefPass(), PassConfig::TYPE_BEFORE_REMOVING, -32);
120126
$container->addCompilerPass(new TestServiceContainerRealRefPass(), PassConfig::TYPE_AFTER_REMOVING);
127+
$container->addCompilerPass(new AddMimeTypeGuesserPass());
121128
$this->addCompilerPassIfExists($container, MessengerPass::class);
122129

123130
if ($container->getParameter('kernel.debug')) {

Resources/config/mime_type.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<defaults public="false" />
9+
10+
<service id="mime_types" class="Symfony\Component\Mime\MimeTypes" public="true" />
11+
</services>
12+
</container>

Resources/config/serializer.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
</service>
4343

4444
<service id="serializer.normalizer.data_uri" class="Symfony\Component\Serializer\Normalizer\DataUriNormalizer">
45+
<argument type="service" id="mime_types" on-invalid="null" />
4546
<!-- Run before serializer.normalizer.object -->
4647
<tag name="serializer.normalizer" priority="-920" />
4748
</service>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddMimeTypeGuesserPass;
16+
use Symfony\Component\DependencyInjection\ContainerBuilder;
17+
use Symfony\Component\DependencyInjection\Definition;
18+
use Symfony\Component\DependencyInjection\Reference;
19+
use Symfony\Component\Mime\FileinfoMimeTypeGuesser;
20+
use Symfony\Component\Mime\MimeTypes;
21+
22+
class AddMimeTypeGuesserPassTest extends TestCase
23+
{
24+
public function testTags()
25+
{
26+
$container = new ContainerBuilder();
27+
$container->addCompilerPass(new AddMimeTypeGuesserPass());
28+
29+
$definition = new Definition(FileinfoMimeTypeGuesser::class);
30+
$definition->addArgument('/path/to/magic/file');
31+
$definition->addTag('mime.mime_type_guesser');
32+
$container->setDefinition('some_mime_type_guesser', $definition->setPublic(true));
33+
$container->register('mime_types', MimeTypes::class)->setPublic(true);
34+
$container->compile();
35+
36+
$router = $container->getDefinition('mime_types');
37+
$calls = $router->getMethodCalls();
38+
$this->assertCount(1, $calls);
39+
$this->assertEquals('registerGuesser', $calls[0][0]);
40+
$this->assertEquals(new Reference('some_mime_type_guesser'), $calls[0][1][0]);
41+
}
42+
}

composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"symfony/contracts": "^1.0.2",
2424
"symfony/dependency-injection": "^4.2",
2525
"symfony/event-dispatcher": "^4.1",
26-
"symfony/http-foundation": "^4.1.2",
26+
"symfony/http-foundation": "^4.3",
2727
"symfony/http-kernel": "^4.2",
2828
"symfony/polyfill-mbstring": "~1.0",
2929
"symfony/filesystem": "~3.4|~4.0",
@@ -43,10 +43,11 @@
4343
"symfony/form": "^4.2",
4444
"symfony/expression-language": "~3.4|~4.0",
4545
"symfony/messenger": "^4.2",
46+
"symfony/mime": "^4.3",
4647
"symfony/process": "~3.4|~4.0",
4748
"symfony/security-core": "~3.4|~4.0",
4849
"symfony/security-csrf": "~3.4|~4.0",
49-
"symfony/serializer": "^4.2",
50+
"symfony/serializer": "^4.3",
5051
"symfony/stopwatch": "~3.4|~4.0",
5152
"symfony/translation": "~4.2",
5253
"symfony/templating": "~3.4|~4.0",

0 commit comments

Comments
 (0)