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

Zach-vip發表於2016-01-29

習慣了之前的出現錯誤,就立即解決的方式。現在在用symfony的用法,發現原來自己一直錯過了一個東西:Exception

現在講講symfony2中如何處理錯誤

1.首先自己在src/AppBundle下建立了一個Exception的資料夾,

BaseException.php的異常基類
namespace AppBundle\Exception;

class BaseException extends \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 <zhujian@thinkerx.com>
 */
class NoAuthorityException extends BaseException
{
    function __construct($message)
    {
        parent::__construct($message, BaseException::ERROR_CODE_NO_AUTHORITY);
    }
}
UnLoginException.php
namespace Material\Exception;

/**
 * 未登入異常類
 *
 * @author zhujian <zhujian@thinkerx.com>
 */
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 AjaxExceptionListener extends ExceptionListener
{

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();

        $response = new JsonResponse(array(
            'status' => $exception->getCode(),
            'msg' => $exception->getMessage(),
        ));
        $event->setResponse($response);
    }
}
這樣的話有錯誤,我們就可以進行丟擲錯誤,最後在Event進行監聽,處理。

相關文章