9

私の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.いつもエラーが発生しています。何か助けや手がかりはありますか?

4

2 に答える 2

8

コンパイルが完了すると、コンテナを変更することはできません。これは、コントローラを呼び出す前に行われます。

DICパラメーターは、構成を目的としたものであり、グローバル変数の代わりにはなりません。さらに、ある種の永続的な変更を永続化する必要があるようです。その場合、セッションがユーザーごとの変更である場合はセッションを使用することを検討し、アプリケーション全体であると想定される場合はセッションを(DBなどに)永続化することを検討してください。

DICパラメータまたはサービスを変更する必要がある場合は、コンパイラパスを使用して変更できます。カスタムコンパイラパスの作成方法の詳細については、 http ://symfony.com/doc/master/cookbook/service_container/compiler_passes.htmlを参照してください。

于 2013-03-12T15:42:51.223 に答える
-2

$ _ENV変数を設定して、後で取得できます

putenv("VAR=1");

そして得るために

getenv("VAR");
于 2019-01-29T09:29:10.293 に答える