TwigSwiftMailer класс предоставляет только сущность User
и URL подтверждения для шаблона. Вы должны расширить класс и изменить методы. Затем создайте сервис и установите его по умолчанию. Вы можете проверить здесь для определения услуги.
Редактировать:
Пример реализации будет
Класс.
//namespace declaration
class MySwiftMailer extends TwigSwiftMailer
{
private $container;
/**
* @param Symofony\Component\DependencyInjection\ContainerInerface $container
*/
public function setContainer(ContainerInterface $container)
{
$this->container = $container;
}
public function sendConfirmationEmailMessage(UserInterface $user)
{
$template = $this->parameters['template']['confirmation'];
$url = $this->router->generate('fos_user_registration_confirm', array('token' => $user->getConfirmationToken()), true);
$context = array(
'user' => $user,
'container' => $this->container,
'session' => $this->container->get('request')->getSession(), // expose session
'confirmationUrl' => $url
);
$this->sendMessage($template, $context, $this->parameters['from_email']['confirmation'], $user->getEmail());
}
// implement sendResettingEmailMessage() in same way
}
Сервисная декларация. Создайте класс с именем mailer.xml
в папке bundles Resources/config
.
<?xml version="1.0" encoding="UTF-8"?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="fos_user.mailer.my_swift_mailer" class="FOS\UserBundle\Mailer\TwigSwiftMailer" >
<argument type="service" id="mailer" />
<argument type="service" id="router" />
<argument type="service" id="twig" />
<argument type="collection">
<argument key="template" type="collection">
<argument key="confirmation">%fos_user.registration.confirmation.template%</argument>
<argument key="resetting">%fos_user.resetting.email.template%</argument>
</argument>
<argument key="from_email" type="collection">
<argument key="confirmation">%fos_user.registration.confirmation.from_email%</argument>
<argument key="resetting">%fos_user.resetting.email.from_email%</argument>
</argument>
</argument>
<call method="setContainer">
<argument type="service" id="service_container" />
</call>
</service>
</services>
</container>
Чтобы включить loader.xml
, вы должны включить следующие строки в load
метод YourBundle/DependencyInjection/YourBundleExtension.php
$xmlLoader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$xmlLoader->load("mailer.xml");
А в app/config.yml
установить почтовик.
# app/config/config.yml
fos_user:
# ...
service:
mailer: fos_user.mailer.my_swift_mailer
Теперь в вашем шаблоне вы можете сделать {{ session.get('var') }}
или {{ container.getParameter('any_param') }}