#php #symfony #twig
#php #symfony #twig
Вопрос:
В моей базе данных я храню шаблоны электронной почты с персонализированными строками темы, такими как Dear {{ firstname }} {{ lastname }}, thank you for registration!
.
Пользователи системы должны иметь возможность писать новые тематические строки, содержащие различные переменные, такие как firstname
, lastname
, salutation
и т.д., Которые также хранятся в базе данных.
Я не хочу решать эту проблему с помощью template_from_string
функции, как описано в других вопросах.
Это контроллер, который я использую для отправки электронной почты:
<?php
namespace AppBundleController;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationRequest;
use SensioBundleFrameworkExtraBundleConfigurationMethod;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use AppBundleEntityLead;
use AppBundleFormLeadType;
use SymfonyComponentHttpFoundationSessionSession;
use SymfonyComponentRoutingGeneratorUrlGeneratorInterface;
class RegisterController extends Controller
{
/**
* @Route("/{url}")
*/
public function submitFormAction($url, Request $request)
{
$frontend_vars = $this->getDoctrine()
->getRepository('AppBundle:Publisher')
->findOneByUrl($url);
if($frontend_vars == null) {
return $this->render('frontend/register_error.html.twig');
}
$lead = new Lead();
$form = $this->createForm('AppBundleFormLeadType', $lead, array(
'frontend_vars' => $frontend_vars
));
$form->handleRequest($request);
if ($form->isSubmitted() amp;amp; $form->isValid()) {
// Generate Unique User Hash
// $lead->setUniqueUserHash() = 'julius';
$em = $this->getDoctrine()->getManager();
$em->persist($lead);
$em->flush();
// Send Mail
$message = Swift_Message::newInstance()
->setSubject($frontend_vars->getMailsubject())
->setFrom('$frontend_vars->getMailfrom()')
->setTo('me@mycompany.com')
->setBody($frontend_vars->getMailcontent()),
'text/html'
);
$this->get('mailer')->send($message);
return $this->redirectToRoute('lastPage', array('url' => $frontend_vars->getUrl()));
}
return $this->render('frontend/register.html.twig', array(
'content' => $frontend_vars,
'logos' => $logopath,
'form' => $form->createView(),
));
}
У меня нет файлов twig для создания электронной почты, поскольку они генерируются пакетом администратора sonata function configureFormFields(FormMapper $formMapper) { ... }
Таким образом, в полях формы, сгенерированных пакетом администратора sonata, пользователь должен ввести тему, адрес и содержимое, подобные этому:
«Уважаемый {{ firstname }} {{ lastname }}, спасибо за регистрацию!»
Комментарии:
1. Пожалуйста, покажите какой-нибудь пример кода, который вы пробовали, включая контроллер и полный файл twig.
2. Только что добавил свой код.