为可能的 n00b 问题道歉,但我们开始吧。我目前正在 symfony2 中编写一个使用 ajax 收集数据的服务类。数据基本上由表单提交时发送的两个时间戳组成。然后我想要做的是将它传递给我的控制器并将其写入自定义parameters.yml 文件,以便我可以将值存储在此文件中并在每次用户提交表单时更新此文件。我收到这样的错误:
Impossible to call set() on a frozen ParameterBag
在谷歌上的一些搜索告诉我,一旦容器编译完成,我就无法修改它。特别是导致这种情况的行是:
$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;
}
也许我应该在编译容器之前这样做?但我不知道容器究竟是在哪里编译的......或者我应该用另一种方式......?