我有一个非常奇怪的问题,看起来像这样:
[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等是否都以
两个动作(工作一个和不工作一个)都在同一个控制器中
只要呈现表单,Symfony就会自动启动会话以存储CSRF保护的令牌:
http://symfony.com/doc/current/book/forms.html#csrf-protection
http://symfony.com/doc/current/book/forms.html#csrf-protection
您可以禁用CSRF保护,但默认情况下它处于启用状态.
@rakete:
我唯一的想法是改变存储会话文件的方式(例如文件系统,数据库,内存等).见:http://symfony.com/doc/current/components/http_foundation/session_configuration.html