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

21 Авг 2019 в 07:07
208 +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 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир