2013-03-12 21 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