1. 程式人生 > >symfony2中對異常的處理,個人總結

symfony2中對異常的處理,個人總結

習慣了之前的出現錯誤,就立即解決的方式。現在在用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 UnLoginException
extends 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進行監聽,處理。