在我的config.yml中,我有这个:
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 :(得分:7)
编译后,您无法修改Container,这是在调用控制器之前完成的。
DIC参数用于配置目的 - 不是全局变量的替代。此外,您似乎希望坚持某种永久性修改。在这种情况下,考虑使用会话,如果它是每用户修改或持久化(例如进入DB),如果它应该是应用程序范围。
如果需要修改DIC参数或服务,可以使用编译器传递来完成。有关如何编写自定义编译器传递的更多信息,请访问: http://symfony.com/doc/master/cookbook/service_container/compiler_passes.html
答案 1 :(得分:0)
您可以设置$ _ENV变量并在之后获取它
putenv("VAR=1");
并获得
getenv("VAR");