Sonata Page передать параметры в блок через контейнер?

В Symfony фреймворке существует много различных пакетов и бандлов, которые упрощают разработку веб-приложений. Одним из таких пакетов является Sonata Project, который предоставляет набор полезных инструментов для создания административных интерфейсов.

Один из модулей Sonata Project называется "Sonata Page". Этот модуль предоставляет инструменты для создания динамических страниц с настраиваемыми блоками. Каждый блок на странице может содержать свои параметры, которые можно передать через контейнер.

Для передачи параметров в блок через контейнер следуйте следующим шагам:

1. Определите параметры блока в файле конфигурации (config.yml или services.yml):

parameters:
    my_block_parameter: my_param_value

2. В классе блока, который вы создаете, внедрите контейнер зависимостей:

use SymfonyComponentDependencyInjectionContainerAwareInterface;
use SymfonyComponentDependencyInjectionContainerAwareTrait;

class MyBlock extends AbstractBlockService implements ContainerAwareInterface
{
    use ContainerAwareTrait;
    
    // ...
    
    public function execute(BlockContextInterface $blockContext, Response $response = null)
    {
        $myParamValue = $this->container->getParameter('my_block_parameter');
        
        // используйте значение параметра в вашем блоке
        
        // ...
        
        return $this->renderResponse('my_block_template.html.twig', [
            // передайте значение параметра в шаблон
            'my_param' => $myParamValue,
        ], $response);
    }
    
    // ...
}

3. Используйте полученное значение параметра в вашем шаблоне (my_block_template.html.twig):

<div>{{ my_param }}</div>

Теперь, когда вы помещаете блок на страницу, он будет использовать значение параметра, переданное через контейнер.

Этот подход позволяет вашим блокам быть более конфигурируемыми и гибкими, так как вы можете легко изменять параметры блока в зависимости от ваших потребностей.