Я пришел сюда, потому что у меня проблема с 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 [] []
Вам не нужно копировать и вставлять код интерфейса. Должен быть на своем месте: в 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;
}
Действительно, проблема вполне понятна, вам не хватает некоторых ссылок на ваши услуги.
Ваш класс требует (как аргументы конструктора) некоторые параметры, чтобы иметь возможность работать. Но ваше определение сервиса не предоставляет ничего из этого.
Я думаю, что вам нужно прочитать немного документация об услугах в Symfony.