2013-03-12 23 views
4

在我config.yml我有这样的:无法调用set()在结冰的ParameterBag

parameters: 
    gitek.centro_por_defecto: 1 

现在,我想这个值从我的控制器使用的形式改变,像这样:

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(), 
    )); 
} 

我总是会收到Impossible to call set() on a frozen ParameterBag.错误。 任何帮助或线索?

+0

不能使用会话吗? – DonCallisto 2013-03-12 15:08:35

回答

6

一旦编译完Container,在调用控制器之前就完成了。

DIC参数用于配置目的 - 不是全局变量的替代。另外,你似乎想要坚持某种永久修改。在这种情况下,如果它是每个用户的修改,或者如果它应该是应用程序范围内的,则考虑使用会话(如果它是每个用户的修改或将其保留)

如果您需要修改DIC参数或服务,您可以使用编译器通过。有关如何编写自定义编译器通行证的更多信息,请访问: http://symfony.com/doc/master/cookbook/service_container/compiler_passes.html

+0

是的,我需要坚持数据。我将为此使用新模型。它将是一个应用程序,安装在不同的用户位置,并且需要不同的配置。谢谢! – 2013-03-13 09:07:59

+0

在这种情况下,我会考虑对每个安装使用不同的'app/config/parameters.yml'文件。 – 2013-03-13 09:57:14