Как изменить параметр в Symfony2? Здравствуйте! Подскажите, пожалуйста, как я могу засеттить параметр прописанный в yaml конфигеparameters: app_main.city: Анадырь Я пробую:$this->container->setParameter('app_main.city', 'Канчалан') но мне выдает ошибку следующего содержания:Impossible to call set() on a frozen ParameterBag. Подскажите, что не так, пожалуйста!
Ошибка "Impossible to call set() on a frozen ParameterBag." означает, что параметры в Symfony2 являются "замороженными" (frozen), то есть их нельзя изменить после загрузки конфигурации.
Для изменения параметра в Symfony2 можно воспользоваться другим подходом. Вы можете создать сервис или расширение контейнера, которое будет использоваться для работы с параметрами.
Пример создания сервиса для работы с параметрами:
Создайте сервис, который будет устанавливать и получать параметры:// src/Service/ParameterService.php namespace App\Service; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; class ParameterService { private $parameterBag; public function __construct(ParameterBagInterface $parameterBag) { $this->parameterBag = $parameterBag; } public function setParameter($name, $value) { $this->parameterBag->set($name, $value); } public function getParameter($name) { return $this->parameterBag->get($name); } }Определите этот сервис в вашем конфигурационном файле services.yaml:# config/services.yaml services: App\Service\ParameterService: arguments: $parameterBag: '@service_container'Теперь вы можете использовать этот сервис для установки и получения параметров в вашем контроллере или сервисе:// src/Controller/SomeController.php namespace App\Controller; use App\Service\ParameterService; use Symfony\Component\HttpFoundation\Response; class SomeController { private $parameterService; public function __construct(ParameterService $parameterService) { $this->parameterService = $parameterService; } public function someAction() { $this->parameterService->setParameter('app_main.city', 'Канчалан'); $city = $this->parameterService->getParameter('app_main.city'); // Дальнейшая логика... return new Response($city); } }
Теперь параметр 'app_main.city' будет установлен в значение 'Канчалан' с помощью вашего сервиса ParameterService.
Ошибка "Impossible to call set() on a frozen ParameterBag." означает, что параметры в Symfony2 являются "замороженными" (frozen), то есть их нельзя изменить после загрузки конфигурации.
Для изменения параметра в Symfony2 можно воспользоваться другим подходом. Вы можете создать сервис или расширение контейнера, которое будет использоваться для работы с параметрами.
Пример создания сервиса для работы с параметрами:
Создайте сервис, который будет устанавливать и получать параметры:// src/Service/ParameterService.phpnamespace App\Service;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class ParameterService
{
private $parameterBag;
public function __construct(ParameterBagInterface $parameterBag)
{
$this->parameterBag = $parameterBag;
}
public function setParameter($name, $value)
{
$this->parameterBag->set($name, $value);
}
public function getParameter($name)
{
return $this->parameterBag->get($name);
}
}Определите этот сервис в вашем конфигурационном файле services.yaml:# config/services.yaml
services:
App\Service\ParameterService:
arguments:
$parameterBag: '@service_container'Теперь вы можете использовать этот сервис для установки и получения параметров в вашем контроллере или сервисе:// src/Controller/SomeController.php
namespace App\Controller;
use App\Service\ParameterService;
use Symfony\Component\HttpFoundation\Response;
class SomeController
{
private $parameterService;
public function __construct(ParameterService $parameterService)
{
$this->parameterService = $parameterService;
}
public function someAction()
{
$this->parameterService->setParameter('app_main.city', 'Канчалан');
$city = $this->parameterService->getParameter('app_main.city');
// Дальнейшая логика...
return new Response($city);
}
}
Теперь параметр 'app_main.city' будет установлен в значение 'Канчалан' с помощью вашего сервиса ParameterService.