Как изменить параметр в Symfony2? Здравствуйте! Подскажите, пожалуйста, как я могу засеттить параметр прописанный в yaml конфигеparameters:
app_main.city: Анадырь
Я пробую:$this->container->setParameter('app_main.city', 'Канчалан')
но мне выдает ошибку следующего содержания:Impossible to call set() on a frozen ParameterBag.
Подскажите, что не так, пожалуйста!

21 Авг 2019 в 07:07
233 +1
0
Ответы
1

Ошибка "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.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир