symfony2中對異常的處理,個人總結
阿新 • • 發佈:2019-02-20
習慣了之前的出現錯誤,就立即解決的方式。現在在用symfony的用法,發現原來自己一直錯過了一個東西:Exception
現在講講symfony2中如何處理錯誤
1.首先自己在src/AppBundle下建立了一個Exception的資料夾,
BaseException.php的異常基類
namespace AppBundle\Exception; class BaseExceptionextends \Exception{ /** * 未登入錯誤 */ const ERROR_CODE_UNLOGIN= 1001; /** * 沒有許可權錯誤 */ const ERROR_CODE_NO_AUTHORITY= 1002; /** * 引數錯誤 */ const ERROR_CODE_ILLEGAL_PARAMETER= 2001; /** * 未知錯誤 */ const ERROR_CODE_UNKNOWN= 5000; /** * 伺服器內部錯誤 */ const ERROR_CODE_INTERNAL= 5001; }
這裡還需要對其進行賦值
NoAuthorityException.php
namespace Material\Exception; /** * 無許可權異常類 * * @author zhujian <[email protected]> */ class NoAuthorityExceptionextends BaseException{ function __construct($message) { parent::__construct($message, BaseException::ERROR_CODE_NO_AUTHORITY); } }
UnLoginException.php
namespace Material\Exception; /** * 未登入異常類 * * @author zhujian <[email protected]> */ class UnLoginExceptionextends BaseException{ function __construct($message) { parent::__construct($message, BaseException::ERROR_CODE_UNLOGIN);
2.建一個EventListener檔案-》ExceptionListener.php
<?php namespace Material\EventListener; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; class ExceptionListener{ public function onKernelException(GetResponseForExceptionEvent$event) { $request = $event->getRequest(); $exceptionListener = null; $exceptionListener = new AjaxExceptionListener(); $exceptionListener->onKernelException($event); } }3.建一個EventListener檔案-》AjaxExceptionListener.php
<?php namespace Material\EventListener; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; class AjaxExceptionListenerextends ExceptionListener{ public function onKernelException(GetResponseForExceptionEvent$event) { $exception = $event->getException(); $response = new JsonResponse(array( 'status' => $exception->getCode(), 'msg' => $exception->getMessage(), )); $event->setResponse($response); } }這樣的話有錯誤,我們就可以進行丟擲錯誤,最後在Event進行監聽,處理。