diff --git a/README.md b/README.md index 6d075c2..71cc1b9 100755 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ class AppKernel extends Kernel ## Renderer -For the moment only one renderer is available, the binary renderer. +Choose from one of two renderers, the binary renderer and mjml-php. ### Binary @@ -82,6 +82,19 @@ mjml: The `node` option is there for those who have problems with `$PATH`, see [#35](https://github.com/notFloran/mjml-bundle/issues/35). +### mjml-php + +Install [mjml-php](https://github.com/alekitto/mjml-php), a PHP extension that embeds [MRML](https://github.com/jdrouet/mrml), +the MJML rendering engine written in Rust, so that you can render MJML templates directly from PHP without shelling out to a CLI tool. + +Then you need to update the configuration: + +```yaml +# config/packages/mjml.yaml +mjml: + renderer: mjml_php +``` + ### Custom First you must create a class which implements `NotFloran\MjmlBundle\Renderer\RendererInterface`, then declare it as a service. diff --git a/src/DependencyInjection/MjmlExtension.php b/src/DependencyInjection/MjmlExtension.php index f13dca5..180f455 100644 --- a/src/DependencyInjection/MjmlExtension.php +++ b/src/DependencyInjection/MjmlExtension.php @@ -3,6 +3,7 @@ namespace NotFloran\MjmlBundle\DependencyInjection; use NotFloran\MjmlBundle\Renderer\BinaryRenderer; +use NotFloran\MjmlBundle\Renderer\MjmlPhpRenderer; use NotFloran\MjmlBundle\Renderer\RendererInterface; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -31,6 +32,10 @@ public function load(array $configs, ContainerBuilder $container): void $rendererDefinition->addArgument($config['options']['mjml_version']); $container->setDefinition($rendererDefinition->getClass(), $rendererDefinition); $rendererServiceId = $rendererDefinition->getClass(); + } elseif ('mjml_php' === $config['renderer']) { + $rendererDefinition = new Definition(MjmlPhpRenderer::class); + $container->setDefinition($rendererDefinition->getClass(), $rendererDefinition); + $rendererServiceId = $rendererDefinition->getClass(); } elseif ('service' === $config['renderer']) { $rendererServiceId = $config['options']['service_id']; } else { diff --git a/src/Renderer/MjmlPhpRenderer.php b/src/Renderer/MjmlPhpRenderer.php new file mode 100644 index 0000000..7992538 --- /dev/null +++ b/src/Renderer/MjmlPhpRenderer.php @@ -0,0 +1,22 @@ + true]); + + $result = $mjml->render($mjmlContent); + + return $result->getBody(); + } catch (RenderException $e) { + throw new \RuntimeException('MJML rendering exception: '.$e->getMessage(), 0, $e); + } + } +}