Skip to content

Commit 676e594

Browse files
committed
Adding a check for the mailer service
1 parent f9d8e00 commit 676e594

4 files changed

Lines changed: 60 additions & 2 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the FOSUserBundle package.
5+
*
6+
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
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 FOS\UserBundle\DependencyInjection\Compiler;
13+
14+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
15+
use Symfony\Component\DependencyInjection\ContainerBuilder;
16+
use Symfony\Flex\Recipe;
17+
18+
/**
19+
* Checks to see if the mailer service exists.
20+
*
21+
* @author Ryan Weaver <ryan@knpuniversity.com>
22+
*/
23+
class CheckForMailerPass implements CompilerPassInterface
24+
{
25+
/**
26+
* {@inheritdoc}
27+
*/
28+
public function process(ContainerBuilder $container)
29+
{
30+
// if the mailer isn't needed, then no error needed
31+
if (!$container->has('fos_user.mailer')) {
32+
return;
33+
}
34+
35+
if ($container->findDefinition('fos_user.mailer')->hasTag('fos_user.requires_swift')) {
36+
$message = 'A feature you activated in FOSUserBundle requires the "mailer" service to be available.';
37+
38+
if (class_exists(Recipe::class)) {
39+
$message .= ' Run "composer require swiftmailer-bundle" to install SwiftMailer or configure a different mailer in "config/packages/fos_user.yaml".';
40+
}
41+
42+
throw new \LogicException($message);
43+
}
44+
45+
}
46+
}

DependencyInjection/FOSUserExtension.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class FOSUserExtension extends Extension
4040
),
4141
);
4242

43+
private $mailerNeeded = false;
44+
4345
/**
4446
* {@inheritdoc}
4547
*/
@@ -67,7 +69,7 @@ public function load(array $configs, ContainerBuilder $container)
6769
$definition->setFactory(array(new Reference('fos_user.doctrine_registry'), 'getManager'));
6870
}
6971

70-
foreach (array('validator', 'security', 'util', 'mailer', 'listeners', 'commands') as $basename) {
72+
foreach (array('validator', 'security', 'util', 'listeners', 'commands') as $basename) {
7173
$loader->load(sprintf('%s.xml', $basename));
7274
}
7375

@@ -79,7 +81,6 @@ public function load(array $configs, ContainerBuilder $container)
7981
$loader->load('flash_notifications.xml');
8082
}
8183

82-
$container->setAlias('fos_user.mailer', $config['service']['mailer']);
8384
$container->setAlias('fos_user.util.email_canonicalizer', $config['service']['email_canonicalizer']);
8485
$container->setAlias('fos_user.util.username_canonicalizer', $config['service']['username_canonicalizer']);
8586
$container->setAlias('fos_user.util.token_generator', $config['service']['token_generator']);
@@ -126,6 +127,11 @@ public function load(array $configs, ContainerBuilder $container)
126127
if (!empty($config['group'])) {
127128
$this->loadGroups($config['group'], $container, $loader, $config['db_driver']);
128129
}
130+
131+
if ($this->mailerNeeded) {
132+
$loader->load('mailer.xml');
133+
$container->setAlias('fos_user.mailer', $config['service']['mailer']);
134+
}
129135
}
130136

131137
/**
@@ -163,6 +169,7 @@ private function loadRegistration(array $config, ContainerBuilder $container, Xm
163169
$loader->load('registration.xml');
164170

165171
if ($config['confirmation']['enabled']) {
172+
$this->mailerNeeded = true;
166173
$loader->load('email_confirmation.xml');
167174
}
168175

@@ -201,6 +208,7 @@ private function loadChangePassword(array $config, ContainerBuilder $container,
201208
*/
202209
private function loadResetting(array $config, ContainerBuilder $container, XmlFileLoader $loader, array $fromEmail)
203210
{
211+
$this->mailerNeeded = true;
204212
$loader->load('resetting.xml');
205213

206214
if (isset($config['email']['from_email'])) {

FOSUserBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Doctrine\Bundle\CouchDBBundle\DependencyInjection\Compiler\DoctrineCouchDBMappingsPass;
1515
use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass;
1616
use Doctrine\Bundle\MongoDBBundle\DependencyInjection\Compiler\DoctrineMongoDBMappingsPass;
17+
use FOS\UserBundle\DependencyInjection\Compiler\CheckForMailerPass;
1718
use FOS\UserBundle\DependencyInjection\Compiler\CheckForSessionPass;
1819
use FOS\UserBundle\DependencyInjection\Compiler\InjectRememberMeServicesPass;
1920
use FOS\UserBundle\DependencyInjection\Compiler\InjectUserCheckerPass;
@@ -37,6 +38,7 @@ public function build(ContainerBuilder $container)
3738
$container->addCompilerPass(new InjectUserCheckerPass());
3839
$container->addCompilerPass(new InjectRememberMeServicesPass());
3940
$container->addCompilerPass(new CheckForSessionPass());
41+
$container->addCompilerPass(new CheckForMailerPass());
4042

4143
$this->addRegisterMappingsPass($container);
4244
}

Resources/config/mailer.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<argument key="resetting">%fos_user.resetting.email.from_email%</argument>
2525
</argument>
2626
</argument>
27+
<tag name="fos_user.requires_swift" />
2728
</service>
2829

2930
<service id="fos_user.mailer.twig_swift" class="FOS\UserBundle\Mailer\TwigSwiftMailer" public="false">
@@ -41,6 +42,7 @@
4142
<argument key="resetting">%fos_user.resetting.email.from_email%</argument>
4243
</argument>
4344
</argument>
45+
<tag name="fos_user.requires_swift" />
4446
</service>
4547

4648
<service id="fos_user.mailer.noop" class="FOS\UserBundle\Mailer\NoopMailer" public="false" />

0 commit comments

Comments
 (0)