0

n00b の質問の可能性があることをお詫びしますが、ここで説明します。現在、ajax を使用してデータを収集するサービス クラスを symfony2 で作成しています。データは基本的に、フォーム送信時に送信される 2 つのタイムスタンプで構成されます。次に、これをコントローラーに渡し、カスタム parameters.yml ファイルに書き込んで、このファイルに値を保存し、ユーザーがフォームを送信するたびにこのファイルを更新できるようにします。次のようなエラーが表示されます。

Impossible to call set() on a frozen ParameterBag

また、Google で検索すると、一度コンパイルしたコンテナは変更できないことがわかります。特にこれを引き起こしている行は次のとおりです。

$this->container->setParameter('quicksign.start.off', $startOff);

コードを表示する時間です。これが私のコントローラーです:

public function updateServiceSigAction() {

$logger = $this->get('logger');
$request = $this->get('request');
$errors = array();

if (WebserviceController::POST_ONLY && $request->getMethod() != 'POST') {
    $errors[] = "Not allowed !";
    return $this->sendResponse($errors);
}

$params = $request->request->all();

if (count($params) == 0) {
    $errors[] = "Missing parameters !";
    return $this->sendResponse($errors);
} else {

    $servicesig_services = $this->get('servicesigservice');
    $errors = $servicesig_services->updateServiceSig($params, false);

}

return $this->sendResponse($errors, array(), true);

}

そして、これが私のサービスクラスの関連メソッドです:

public function updateServiceSig($params, $need_to_flush = true) {

$errors = array();

$startOff = $params['date_debut'];
$endOff = $params['date_fin'];

if (empty($startOff) || empty($endOff)) {
    $errors[] = "Missing parameters from query !";
} else {

    $this->container->setParameter('quicksign.start.off', $startOff);
    $this->container->setParameter('quicksign.end.off', $endOff);
}
return $errors;
}

コンテナをコンパイルする前にこれを行うべきでしょうか?しかし、コンテナがどこでコンパイルされているのか正確にはわかりません...または、別の方法でコンパイルする必要があります...?

4

2 に答える 2

3

だからここに私がそれを成し遂げた方法があります:

use Symfony\Component\Yaml\Dumper; //I'm includng the yml dumper. Then :
$ymlDump = array( 'parameters' => array( 
   'quicksign.active' => 'On', 
   'quicksign.start.off' => $startOff, 
   'quicksign.end.off' => $endOff ), 
 );
$dumper = new Dumper(); 
$yaml = $dumper->dump($ymlDump);
$path = WEB_DIRECTORY . '/../app/config/parameters.sig.yml'; 
file_put_contents($path, $yaml);

WEB_DIRECTORY が app.php ファイルで定義されている場所 -> ただし、使用する必要があります

%kernel.root_dir%

サービス構成で。

于 2013-08-09T14:10:45.017 に答える
2

私の理解では、parameters.ymlファイルを間違って使用しています。公式ドキュメントには次のように記載されています。

これの用途の 1 つは、値をサービスに注入することです。これにより、アプリケーション間で異なるバージョンのサービスを構成したり、同じクラスに基づいて単一のアプリケーション内で構成が異なる複数のサービスを構成したりできます。

したがって、このファイルはサービスの状態を保存するためのものではなく、初期状態を構成するためのものです。複数のアプリケーションが同じソースコードを使用する場合に使用します。例としては、ステージング環境と本番環境、または異なる接続パラメーターを必要とする 2 つの ORM のような 1 つのアプリケーション内の複数のサービスがあります。そうは言っても、おそらくエンティティを使用してタイムスタンプを格納する必要があります。

本当にファイルが必要な場合は、たとえばSymfony の YAML コンポーネントを使用してカスタム.ymlファイルを管理できます。

于 2013-07-30T10:42:09.790 に答える