Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Impossible to call set() on a frozen ParameterBag

Tags:

symfony

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?

like image 421
Kioko Kiaza Avatar asked Mar 12 '13 14:03

Kioko Kiaza


1 Answers

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

like image 52
tomas.pecserke Avatar answered Oct 21 '22 08:10

tomas.pecserke