Symfony2 и FOSUserBundle: переопределить почтовую программу

Я пришел сюда, потому что у меня проблема с OVH и моим приложением symfony2, я не могу отправлять почту с помощью SwiftMailer. Для FOSUserBundle довольно проблематично сбросить пароль или активировать мою учетную запись после надписи. Поэтому я хочу использовать MAIL функция реализована в PHP, я следовал документации Вот . Итак, я создал свой класс MailerInterface.phpи класс Mailer.php потому что этот класс отправляет почту с функцией sendEmailMessage

Здесь вы можете увидеть, как я реализовал класс:

<?php
namespace MonApp\UserBundle\Mailer;

use FOS\UserBundle\Model\UserInterface;

interface MailerInterface
{
function sendConfirmationEmailMessage(UserInterface $user);

function sendResettingEmailMessage(UserInterface $user);
}
?>

И Mailer.php :

<?php
namespace MonApp\UserBundle\Mailer;

use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Component\Routing\RouterInterface;
use FOS\UserBundle\Model\UserInterface;
use MonApp\UserBundle\Mailer\MailerInterface;

class Mailer implements MailerInterface
{
protected $mailerMonApp;
protected $router;
protected $templating;
protected $parameters;

public function __construct($mailerMonApp, RouterInterface $router, EngineInterface $templating, array $parameters) {
$this->mailerMonApp = $mailerMonApp;
$this->router = $router;
$this->templating = $templating;
$this->parameters = $parameters;
}

public function sendConfirmationEmailMessage(UserInterface $user) {
The function...
}

public function sendResettingEmailMessage(UserInterface $user) {
The function...
}

protected function sendEmailMessage($renderedTemplate, $fromEmail, $toEmail) {
$renderedLines = explode("\n", trim($renderedTemplate));
$subject = $renderedLines[0];
$body = implode("\n", array_slice($renderedLines, 1));

mail($toEmail, $subject, $body, '[email protected]');
}
}

Я добавил свой класс как услугу:

services:
monapp.mailer:
class: MonApp\UserBundle\Mailer\Mailer

И изменил config.yml :

service:
mailer: monapp.mailer

Здесь ERROR в Dev env:

     Warning: Missing argument 1 for MonApp\UserBundle\Mailer\Mailer::__construct(), called in /home/domaine/www/nomappli/app/cache/dev/appDevDebugProjectContainer.php on line 831 and defined in /home/domaine/www/nomappli/src/MonApp/UserBundle/Mailer/Mailer.php line 29

Моя проблема: когда я прихожу на страницу сброса пароля, я пишу псевдо, и после проверки формы я получаю белую страницу. Я думаю, что я называю class and use используется в учебнике, поэтому я не понимаю мою проблему, может быть, я забыл использовать?

Спасибо

РЕДАКТИРОВАТЬ
Здесь логи ошибок (спасибо Михаилу & Янн мне помог)

[2015-03-31 14:55:35] request.INFO: Matched route "fos_user_resetting_send_email" (parameters: "_controller": "FOS\UserBundle\Controller\ResettingController::sendEmailAction", "_route": "fos_user_resetting_send_email") [] []
[2015-03-31 14:55:35] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2015-03-31 14:55:35] request.CRITICAL: Uncaught PHP Exception InvalidArgumentException: "Unable to find template ""." at /home/nomappli/www/monapp/vendor/symfony/symfony/src/Symfony/Bridge/Twig/TwigEngine.php line 128 {"exception":"[object] (InvalidArgumentException: Unable to find template \"\". at /home/nomappli/www/monapp/vendor/symfony/symfony/src/Symfony/Bridge/Twig/TwigEngine.php:128, Twig_Error_Loader: Unable to find template \"\". at /home/nomappli/www/monapp/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/Loader/FilesystemLoader.php:106, InvalidArgumentException: Template name \"\" is not valid (format is \"bundle:section:template.format.engine\"). at /home/nomappli/www/monapp/app/cache/prod/classes.php:742)"} []
[2015-03-31 14:55:35] security.DEBUG: Write SecurityContext in the session [] []

2

Решение

Вам не нужно копировать и вставлять код интерфейса. Должен быть на своем месте: в FOSUserBundle. Вам просто нужно реализовать этот интерфейс. Это означает, что вам нужно создать класс, в котором вы размещаете implements MailerInterface,

У вас уже есть этот класс. Просто замени use MonApp\UserBundle\Mailer\MailerInterface; от use FOS\UserBundle\Mailer\MailerInterface и удалите свою копию оригинального интерфейса.

ОБНОВИТЬ

Когда вы обновили свой вопрос, я обновил свой ответ. Ваша текущая проблема связана с настройкой сервиса. Вам нужно ввести аргументы для конструктора в определении сервиса:

services:
monapp.mailer:
class: MonApp\UserBundle\Mailer\Mailer
arguments:
- @router
- @templating
- {from_email: {confirmation: %fos_user.registration.confirmation.from_email%, resetiing: %fos_user.resetting.email.from_email%}}

Также измените ваш метод конструктора: удалите $mailerMonApp из аргументов:

      public function __construct(RouterInterface $router, EngineInterface $templating, array $parameters) {
$this->router = $router;
$this->templating = $templating;
$this->parameters = $parameters;
}
2

Другие решения

Действительно, проблема вполне понятна, вам не хватает некоторых ссылок на ваши услуги.
Ваш класс требует (как аргументы конструктора) некоторые параметры, чтобы иметь возможность работать. Но ваше определение сервиса не предоставляет ничего из этого.
Я думаю, что вам нужно прочитать немного документация об услугах в Symfony.

0

По вопросам рекламы [email protected]