We are migrating from 100% Symfony to Prestashop 1.7 but we would like to keep and re-use our existing codebase. Here’s a how-to.
How Symfony works
URL > Router > Controller > Symfony Services calls & DB calls via Doctrine > display Twig template
You go to a URL, which is mapped to a Controller via the @Route
annotation. This Controller will fetch data from Services and directly from the database (through the Doctrine Service 😉), and then send those data to a template that will display them in a nice way.
How Prestashop works
Pretty much the same way !
URL > Tab > Controller > Prestashop static functions & raw DB calls via PDO > display Smarty template
Call symfony from a Prestashop Controller
In you are on a Backoffice page, the symfony global $kernel is always available. If you’re on a Frontoffice page, you have to create it manually (see this page on how to work with the symfony kernel in Prestashop):
// for the front require_once _PS_ROOT_DIR_.'/app/AppKernel.php'; $kernel = new \AppKernel('prod', false); // $env, $debug $kernel->boot(); // or if for the back // global $kernel; $twig = $kernel->getContainer()->get('twig'); $html = $twig->render(_PS_ROOT_DIR_.'/src/YourBundle/Resources/views/Directory1/view1.html.twig', [ 'var1' => [], 'var2' => 'your value here', 'var3' => 123, ]);