浏览代码

Merge remote branch 'francisbesset/webprofiler_session'

* francisbesset/webprofiler_session:
  [WebProfilerBundle] Displayed search form even if the session is not configured
  [WebProfilerBundle] Cleaned controller
  [WebProfilerBundle] Fixed errors on search action
  [WebProfilerBundle] Fixed WebDebugToolbarListener
  [WebProfilerBundle] Updated return Response
  [WebProfilerBundle] Fixed errors if the session is not configured
Fabien Potencier 14 年之前
父节点
当前提交
d2af468b60

+ 39 - 21
src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php

@@ -129,8 +129,10 @@ class ProfilerController extends ContainerAware
     {
         $request = $this->container->get('request');
 
-        // keep current flashes for one more request
-        $request->getSession()->setFlashes($request->getSession()->getFlashes());
+        if (null !== $session = $request->getSession()) {
+            // keep current flashes for one more request
+            $session->setFlashes($session->getFlashes());
+        }
 
         if (null === $token) {
             return new Response();
@@ -175,17 +177,23 @@ class ProfilerController extends ContainerAware
         $profiler = $this->container->get('profiler');
         $profiler->disable();
 
-        $session = $this->container->get('request')->getSession();
-        $ip = $session->get('_profiler_search_ip');
-        $url = $session->get('_profiler_search_url');
-        $limit = $session->get('_profiler_search_limit');
-        $token = $session->get('_profiler_search_token');
+        if (null === $session = $this->container->get('request')->getSession()) {
+            $ip    =
+            $url   =
+            $limit =
+            $token = null;
+        } else {
+            $ip    = $session->get('_profiler_search_ip');
+            $url   = $session->get('_profiler_search_url');
+            $limit = $session->get('_profiler_search_limit');
+            $token = $session->get('_profiler_search_token');
+        }
 
         return $this->container->get('templating')->renderResponse('WebProfilerBundle:Profiler:search.html.twig', array(
-            'token'    => $token,
-            'ip'       => $ip,
-            'url'      => $url,
-            'limit'    => $limit,
+            'token' => $token,
+            'ip'    => $ip,
+            'url'   => $url,
+            'limit' => $limit,
         ));
     }
 
@@ -201,10 +209,9 @@ class ProfilerController extends ContainerAware
 
         $pofiler = $profiler->loadFromToken($token);
 
-        $session = $this->container->get('request')->getSession();
-        $ip = $session->get('_profiler_search_ip');
-        $url = $session->get('_profiler_search_url');
-        $limit = $session->get('_profiler_search_limit');
+        $ip    = $this->container->get('request')->query->get('ip');
+        $url   = $this->container->get('request')->query->get('url');
+        $limit = $this->container->get('request')->query->get('limit');
 
         return $this->container->get('templating')->renderResponse('WebProfilerBundle:Profiler:results.html.twig', array(
             'token'    => $token,
@@ -229,11 +236,17 @@ class ProfilerController extends ContainerAware
 
         $request = $this->container->get('request');
 
-        $session = $request->getSession();
-        $session->set('_profiler_search_ip', $ip = preg_replace('/[^\d\.]/', '', $request->query->get('ip')));
-        $session->set('_profiler_search_url', $url = $request->query->get('url'));
-        $session->set('_profiler_search_limit', $limit = $request->query->get('limit'));
-        $session->set('_profiler_search_token', $token = $request->query->get('token'));
+        $ip    = preg_replace('/[^\d\.]/', '', $request->query->get('ip'));
+        $url   = $request->query->get('url');
+        $limit = $request->query->get('limit');
+        $token = $request->query->get('token');
+
+        if (null !== $session = $request->getSession()) {
+            $session->set('_profiler_search_ip', $ip);
+            $session->set('_profiler_search_url', $url);
+            $session->set('_profiler_search_limit', $limit);
+            $session->set('_profiler_search_token', $token);
+        }
 
         if (!empty($token)) {
             return new RedirectResponse($this->container->get('router')->generate('_profiler', array('token' => $token)));
@@ -241,7 +254,12 @@ class ProfilerController extends ContainerAware
 
         $tokens = $profiler->find($ip, $url, $limit);
 
-        return new RedirectResponse($this->container->get('router')->generate('_profiler_search_results', array('token' => $tokens ? $tokens[0]['token'] : 'empty')));
+        return new RedirectResponse($this->container->get('router')->generate('_profiler_search_results', array(
+            'token' => $tokens ? $tokens[0]['token'] : 'empty',
+            'ip'    => $ip,
+            'url'   => $url,
+            'limit' => $limit,
+        )));
     }
 
     protected function getTemplateNames($profiler)

+ 4 - 2
src/Symfony/Bundle/WebProfilerBundle/WebDebugToolbarListener.php

@@ -61,8 +61,10 @@ class WebDebugToolbarListener
         }
 
         if ($response->headers->has('X-Debug-Token') && $response->isRedirect() && $this->interceptRedirects) {
-            // keep current flashes for one more request
-            $request->getSession()->setFlashes($request->getSession()->getFlashes());
+            if (null !== $session = $request->getSession()) {
+                // keep current flashes for one more request
+                $session->setFlashes($session->getFlashes());
+            }
 
             $response->setContent($this->templating->render('WebProfilerBundle:Profiler:toolbar_redirect.html.twig', array('location' => $response->headers->get('Location'))));
             $response->setStatusCode(200);