Расширение класса почтовой программы Symfony в FOSUserBundle - PullRequest
2 голосов
/ 13 февраля 2012

Кто-нибудь знает, как вы можете расширить класс Mailer в FOSUserBundle?

Я реализую очень простую проверку электронной почты родителей (вся проверка выполняется в форме, чтобы принудительно ввести электронную почту родителей), если родительское поле электронной почты заполнено на объекте пользователя, то оно должно отправить электронное письмо на этот адрес, а не на адрес электронной почты пользователя.

До сих пор я пробовал следующее:

namespace SSERugby\UserBundle\Mailer;

use FOS\UserBundle\Mailer\Mailer as BaseMailer;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Component\Routing\RouterInterface;

class Mailer extends BaseMailer
{
public function sendConfirmationEmailMessage(UserInterface $user)
{
    $email = $user->getEmail();

    $parentEmail = $user->getParentEmail();

    if(isset($parentEmail)&&(trim($parentEmail)!='')){
        $email = $parentEmail;
    }

    $template = $this->parameters['confirmation.template'];
    $url = $this->router->generate('fos_user_registration_confirm', array('token' => $user->getConfirmationToken()), true);
    $rendered = $this->templating->render($template, array(
        'user' => $user,
        'confirmationUrl' =>  $url
    ));
    $this->sendEmailMessage($rendered, $this->parameters['from_email']['confirmation'], $email);
}
}

Этокажется, просто игнорировать переопределенный класс и использовать по умолчанию, я очистил кэш перед тестированием.

Спасибо

1 Ответ

5 голосов
/ 14 февраля 2012

Вы должны создать новый сервис с расширенным почтовым классом (в src \ SSERugby \ UserBundle \ Resources \ config \ services.xml), например:

<service id="my_mailer" class="SSERugby\UserBundle\Mailer\Mailer" public="true">
    <argument type="service" id="mailer" />
    <argument type="service" id="router" />
    <argument type="service" id="templating" />
    <argument type="collection">
        <argument key="confirmation.template">%fos_user.registration.confirmation.template%</argument>
        <argument key="resetting.template">%fos_user.resetting.email.template%</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>
</service>

и затем в app / config / config.yml используйте эту службу по умолчанию:

fos_user:
    # ...
    service:
        mailer: my_mailer

К вашему сведению: я скопировал все аргументы сервиса из конфигурации почтовой программы FOSUserBundle по умолчанию. Вы можете добавить свои собственные параметры к нему. Также вы можете прочитать о заказных почтовых программах на https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/emails.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...