【发布时间】:2015-01-02 22:03:36
【问题描述】:
我遇到了一个非常奇怪的问题,如下所示:
[2014-11-06 11:21:13] request.INFO: Matched route "core_timetracking_new_user" (parameters: "_controller": "Bricks\Custom\CoreBundle\Controller\TimeTrackingController::newuserAction", "_route": "core_timetracking_new_user") [] []
[2014-11-06 11:21:13] request.CRITICAL: Uncaught PHP Exception RuntimeException: "Failed to start the session: already started by PHP." at /var/cache/app/prod/classes.php line 113 {"exception":"[object] (RuntimeException: Failed to start the session: already started by PHP. at /var/cache/app/prod/classes.php:113)"} []
奇怪的是我没有启动会话或使用它,这是控制器代码:
/**
* @View
*/
public function newuserAction()
{
$trackingService=$this->get('core.timetracking_service');
$user= new TimeTrackingUser();
$request=$this->getRequest();
$form = $this->createFormBuilder($user)
->add('name','text')
->add('email','text')
->add('pass','password')
->add('save', 'submit', array('label' => 'Erstellen'))
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$trackingService->persistUser($form->getData());
return $this->redirect($this->generateUrl('core_timetracking_user_list'));
}else {
return array(
'form' => $form->createView()
);
}
}
虽然这个动作很有效
/**
* @View
*/
public function listuserAction()
{
$request=$this->getRequest();
$trackingService=$this->get('core.timetracking_service');
$users=$trackingService->getAllUsers();
return array(
'users' => $users
);
}
所以唯一的区别是我使用了
$form->handleRequest($request);
还检查了我的所有文件 AppKernel 等是否都以
两个动作(工作的一个和不工作的一个)都在同一个控制器中
【问题讨论】:
-
您是否碰巧开启了“session.auto_start”配置选项? php.net/manual/en/…
-
嗨@john Smith,会话是由 Symfony2 自动声明的,所以有可能,如果您使用 PHP 函数或其他方式再次手动启动会话,则可能会发生该问题,而您可以在 config.yml 文件中停止自动启动会话。
-
@Erik session.auto_start => Off => Off ,好像关闭了
-
第二个动作在调用 $request=$this->getRequest(); 时也有效在那里,我只是没有得到错误,似乎涉及 $form->handleRequest