хорошо, наконец-то это работает!!!
Вот шаг, который я выполнил для других:
1/ Вам нужен контроллер для отправки электронных писем:
Поскольку контроллер будет вызываться через команду, вам необходимо внедрить некоторые сервисы.
em : менеджер сущностей для сброса данных
mailer : для доступа к службе swiftMailer для отправки электронной почты
шаблоны: для доступа к сервису TWIG для использования шаблона в теле письма
MemberController.php
<?php
namespace Becowo\MemberBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Becowo\CoreBundle\Form\Type\ContactType;
use Becowo\CoreBundle\Entity\Contact;
use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
class MemberController extends Controller
{
private $em = null;
private $mailer = null;
private $templating = null;
private $appMember = null;
public function __construct(EntityManager $em, $mailer, EngineInterface $templating, $appMember)
{
$this->em = $em;
$this->mailer = $mailer;
$this->templating = $templating;
$this->appMember = $appMember;
}
public function sendEmailToNewUsersAction()
{
// To call this method, use the command declared in Becowo\CronBundle\Command\EmailNewUserCommand
// php bin/console app:send-email-new-users
$members = $this->appMember->getMembersHasNotReceivedMailNewUser();
$nbMembers = 0;
$nbEmails = 0;
$listEmails = "";
foreach ($members as $member) {
$nbMembers++;
if($member->getEmail() !== null)
{
$message = \Swift_Message::newInstance()
->setSubject("Hello")
->setFrom(array('[email protected]' => 'Contact Becowo'))
->setTo($member->getEmail())
->setContentType("text/html")
->setBody(
$this->templating->render(
'CommonViews/Mail/NewMember.html.twig',
array('member' => $member)
))
;
$this->mailer->send($message);
$nbEmails++;
$listEmails = $listEmails . "\n" . $member->getEmail() ;
$member->setHasReceivedEmailNewUser(true);
$this->em->persist($member);
}
}
$this->em->flush();
$result = " Nombre de nouveaux membres : " . $nbMembers . "\n Nombre d'emails envoyes : " . $nbEmails . "\n Liste des emails : " . $listEmails ;
return $result;
}
}
2/ Вызов контроллера как услуга
приложение/config/services.yml
app.member.sendEmailNewUsers :
class: Becowo\MemberBundle\Controller\MemberController
arguments: ['@doctrine.orm.entity_manager', '@mailer', '@templating', '@app.member']
3/ Создайте консольную команду для вызова контроллера
Документ: http://symfony.com/doc/current/console.html
YourBundle/Command/EmailNewUserCommand.php
<?php
namespace Becowo\CronBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
class EmailNewUserCommand extends ContainerAwareCommand
{
protected function configure()
{
// the name of the command (the part after "php bin/console")
$this->setName('app:send-email-new-users')
->setDescription('Send welcome emails to new users')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// outputs a message to the console followed by a "\n"
$output->writeln('Debut de la commande d\'envoi d\'emails');
// access the container using getContainer()
$memberService = $this->getContainer()->get('app.member.sendEmailNewUsers');
$results = $memberService->sendEmailToNewUsersAction();
$output->writeln($results);
}
}
4/ Проверьте свою команду!
В консоли вызовите команду: php bin/console app:send-email-new-users
5/ Создайте скрипт для запуска команды
Док (французский): http://www.christophe-meneses.fr/article/deployer-son-projet-symfony-sur-un-hebergement-perso-ovh
..Веб/Пакет/Электронная почтаНовыеПользователи.sh
#!/bin/bash
today=$(date +"%Y-%m-%d-%H")
/usr/local/php5.6/bin/php /homez.1111/coworkinwq/./demo/toto/bin/console app:send-email-new-users --env=demo > /homez.1111/coworkinwq/./demo/toto/var/logs/Cron/emailNewUsers-$today.txt
Здесь мне потребовалось некоторое время, чтобы получить правильный сценарий.
Позаботьтесь о php5.6: он должен соответствовать вашей версии PHP на OVH.
Не забудьте загрузить файл bin/console на сервер
homez.xxxx/name должен совпадать с вашим конфигом (я нашел свой на OVH, а потом в логах)
ВАЖНО: при загрузке файла на сервер добавьте права на выполнение (CHMOD 704)
6/ Создайте задание cron в OVH
Вызовите свой скрипт с помощью команды: ./demo/Becowo/web/Batch/EmailNewUsers.sh
Язык : другой
7/ Подождите!
Нужно дождаться следующего запуска. Затем посмотрите журналы OVH cron или ваши собственные журналы, созданные с помощью команды в файле .sh.
Мне потребовалось несколько дней, чтобы получить его. Наслаждайтесь !!
person
Olivia
schedule
08.03.2017