загрузить выражение twig из базы данных без template_from_string

#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. Только что добавил свой код.