Bläddra i källkod

log exceptions

Don't just throw away the useful error messages!
Grégoire Paris 10 år sedan
förälder
incheckning
1ad0fb8d5c
2 ändrade filer med 55 tillägg och 8 borttagningar
  1. 20 0
      Controller/CRUDController.php
  2. 35 8
      Tests/Controller/CRUDControllerTest.php

+ 20 - 0
Controller/CRUDController.php

@@ -24,6 +24,7 @@ use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
 use Sonata\AdminBundle\Admin\BaseFieldDescription;
 use Sonata\AdminBundle\Util\AdminObjectAclData;
 use Sonata\AdminBundle\Admin\AdminInterface;
+use Psr\Log\NullLogger;
 
 class CRUDController extends Controller
 {
@@ -138,6 +139,21 @@ class CRUDController extends Controller
         }
     }
 
+    /**
+     * Proxy for the logger service of the container.
+     * If no such service is found, a NullLogger is returned.
+     *
+     * @return Psr\Log\LoggerInterface
+     */
+    protected function getLogger()
+    {
+        if ($this->container->has('logger')) {
+            return $this->container->get('logger');
+        } else {
+            return new NullLogger;
+        }
+    }
+
     /**
      * Returns the base template name
      *
@@ -215,6 +231,7 @@ class CRUDController extends Controller
             $modelManager->batchDelete($this->admin->getClass(), $query);
             $this->addFlash('sonata_flash_success', 'flash_batch_delete_success');
         } catch (ModelManagerException $e) {
+            $this->getLogger()->error($e->getMessage());
             $this->addFlash('sonata_flash_error', 'flash_batch_delete_error');
         }
 
@@ -268,6 +285,7 @@ class CRUDController extends Controller
                 );
 
             } catch (ModelManagerException $e) {
+                $this->getLogger()->error($e->getMessage());
 
                 if ($this->isXmlHttpRequest()) {
                     return $this->renderJson(array('result' => 'error'));
@@ -356,6 +374,7 @@ class CRUDController extends Controller
                     return $this->redirectTo($object);
 
                 } catch (ModelManagerException $e) {
+                    $this->getLogger()->error($e->getMessage());
 
                     $isFormValid = false;
                 }
@@ -599,6 +618,7 @@ class CRUDController extends Controller
                     return $this->redirectTo($object);
 
                 } catch (ModelManagerException $e) {
+                    $this->getLogger()->error($e->getMessage());
 
                     $isFormValid = false;
                 }

+ 35 - 8
Tests/Controller/CRUDControllerTest.php

@@ -212,6 +212,10 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
         // php 5.3 BC
         $csrfProvider = $this->csrfProvider;
 
+        $this->logger = $this->getMock('Psr\Log\LoggerInterface');
+        $logger       = $this->logger; // php 5.3 BC
+
+
         $requestStack = null;
         if (Kernel::MINOR_VERSION > 3) {
             $requestStack = new \Symfony\Component\HttpFoundation\RequestStack();
@@ -231,8 +235,9 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
                 $auditManager,
                 $adminObjectAclManipulator,
                 $requestStack,
-                $csrfProvider
-        ) {
+                $csrfProvider,
+                $logger
+            ) {
                 switch ($id) {
                     case 'sonata.admin.pool':
                         return $pool;
@@ -256,6 +261,8 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
                         return $adminObjectAclManipulator;
                     case 'form.csrf_provider':
                         return $csrfProvider;
+                    case 'logger':
+                        return $logger;
                 }
 
                 return null;
@@ -271,6 +278,10 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
                     return true;
                 }
 
+                if ($id == 'logger') {
+                    return true;
+                }
+
                 return false;
             }));
 
@@ -653,12 +664,17 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
     {
         $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
 
+        $message = 'test message';
         $modelManager->expects($this->once())
             ->method('batchDelete')
-            ->will($this->returnCallback(function () {
-                    throw new ModelManagerException();
+            ->will($this->returnCallback(function () use ($message) {
+                    throw new ModelManagerException($message);
                 }));
 
+        $this->logger->expects($this->once())
+            ->method('error')
+            ->with($message);
+
         $this->admin->expects($this->once())
             ->method('getModelManager')
             ->will($this->returnValue($modelManager));
@@ -918,12 +934,17 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('DELETE'))
             ->will($this->returnValue(true));
 
+        $message = 'test message';
         $this->admin->expects($this->once())
             ->method('delete')
-            ->will($this->returnCallback(function () {
-                    throw new ModelManagerException();
+            ->will($this->returnCallback(function () use ($message) {
+                    throw new ModelManagerException($message);
                 }));
 
+        $this->logger->expects($this->once())
+            ->method('error')
+            ->with($message);
+
         $this->request->setMethod('DELETE');
 
         $this->request->request->set('_sonata_csrf_token', 'csrf-token-123_sonata.delete');
@@ -1066,12 +1087,18 @@ class CRUDControllerTest extends \PHPUnit_Framework_TestCase
 
         $this->expectTranslate('flash_delete_error');
 
+        $message = 'test message';
+
         $this->admin->expects($this->once())
             ->method('delete')
-            ->will($this->returnCallback(function () {
-                throw new ModelManagerException();
+            ->will($this->returnCallback(function () use ($message){
+                throw new ModelManagerException($message);
             }));
 
+        $this->logger->expects($this->once())
+            ->method('error')
+            ->with($message);
+
         $this->request->setMethod('DELETE');
         $this->request->request->set('_sonata_csrf_token', 'csrf-token-123_sonata.delete');