Ответ
Я работал с интеграцией Smarty в Symfony при поддержке legacy-проекта, который изначально был написан на чистом PHP со Smarty и постепенно мигрировал на Symfony.
Основные шаги по интеграции:
1. Установка бандла `smarty/smarty-bundle` через Composer.
2. Настройка в `config/packages/smarty.yaml`:
```yaml
smarty:
options:
template_dir: '%kernel.project_dir%/templates/'
compile_dir: '%kernel.project_dir%/var/cache/smarty/compile/'
cache_dir: '%kernel.project_dir%/var/cache/smarty/cache/'
```
3. Использование в контроллере аналогично Twig:
```php
// src/Controller/ProductController.php
class ProductController extends AbstractController
{
public function show(int $id): Response
{
$product = $this->getDoctrine()->getRepository(Product::class)->find($id);
return $this->render('product/show.tpl', [
'product' => $product,
'features' => $product->getFeaturesAsArray()
]);
}
}
```
**Пример шаблона `templates/product/show.tpl`:**
```smarty
{extends file='layout/base.tpl'}
{block name='title'}Детали товара: {$product.name}{/block}
{block name='content'}
{$product.name|escape}
Цена: {$product.price|number_format:2} руб.
{if !empty($features)}Характеристики:
-
{foreach $features as $key => $value}
- {$key|capitalize}: {$value} {/foreach}
Ответ 18+ 🔞
Давай разберем эту историю, как я Smarty в Symfony впихивал. Ситуация была пиздопроебибна, честно говоря. У нас был легаси-проект, древний, как хуй с горы, написанный на чистом PHP, а шаблоны — все на Smarty. И вот пришла команда: «А давайте мигрируем на Symfony, но шаблоны переписывать — овердохуища работы, давайте интегрируем».
Ну, думаю, ёпта, а что, бывает и такое. Полез гуглить. Оказалось, есть даже готовый бандл, `smarty/smarty-bundle`. Установил через Composer — вроде живой.
Дальше настройка в `config/packages/smarty.yaml`. Всё стандартно, в рот меня чих-пых, указал пути к папкам с шаблонами, куда компилить и кешировать.
```yaml
smarty:
options:
template_dir: '%kernel.project_dir%/templates/'
compile_dir: '%kernel.project_dir%/var/cache/smarty/compile/'
cache_dir: '%kernel.project_dir%/var/cache/smarty/cache/'
```
В контроллере, кстати, всё выглядит почти как с Twig, даже приятно. Никакой магии.
```php
// src/Controller/ProductController.php
class ProductController extends AbstractController
{
public function show(int $id): Response
{
$product = $this->getDoctrine()->getRepository(Product::class)->find($id);
return $this->render('product/show.tpl', [
'product' => $product,
'features' => $product->getFeaturesAsArray()
]);
}
}
```
А вот сам шаблон — это отдельная песня. Смотри, какой привет из двухтысячных.
```smarty
{extends file='layout/base.tpl'}
{block name='title'}Детали товара: {$product.name}{/block}
{block name='content'}
{$product.name|escape}
Цена: {$product.price|number_format:2} руб.
{if !empty($features)}Характеристики:
-
{foreach $features as $key => $value}
- {$key|capitalize}: {$value} {/foreach}