Impossible to call set() on a frozen ParameterBag

symfony

Solution

You can't modify Container once it has been compiled, which is done before invoking the controller.

The DIC parameters are intended for configuration purposes - not a replacement for global variables. In addition it seems you want to persist some kind of permanent modification. In that case consider using session if it's a per-user modification or persisting it (e.g. into DB) if it's supposed to be application-wide.

If you need to modify DIC parameters or services, you can do so using a compiler pass. More info on how to write custom compiler passes can be found at: http://symfony.com/doc/master/cookbook/service_container/compiler_passes.html

Problem

In my config.yml I have this: ``` parameters: gitek.centro_por_defecto: 1 ``` Now, I want to change this value from my controller using a form, like this: ``` public function seleccionAction(Request $request) { $entity = new Centro(); $form = $this->createForm(new SeleccionType(), $entity); $centro = $this->container->getParameter('gitek.centro_por_defecto'); if ($this->getRequest()->getMethod() == 'POST') { $form->bind($this->getRequest()); if ($form->isValid()) { $miseleccion = $request->request->get('selecciontype'); $this->container->setParameter('gitek.centro_por_defecto', $miseleccion['nombre']); // return $this->redirect($this->generateUrl('admin_centro')); } } return $this->render('BackendBundle:Centro:seleccion.html.twig', array( 'entity' => $entity, 'form' => $form->createView(), )); } ``` I´m getting `Impossible to call set() on a frozen ParameterBag.` error all the time. Any help or clue?

Original source