lumen添加自定义异常

Posted php-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lumen添加自定义异常相关的知识,希望对你有一定的参考价值。

在公用工具类写异常类

 

<?php

namespace BradyToolException;


use BradyToolConstantErrorMsg;
use Exception;


class ExceptionResult extends Exception
{
	const DEFAULT_CODE = 500;



	protected static $messageTemplate = [];


	public static function setMsgTemplate(array $template = [])
	{
		static::$messageTemplate = $template;
	}


	public static function getMsgTemplate()
	{
		return static::$messageTemplate;
	}



	public function errorMsg()
	{
		return "异常信息:文件-".$this->getFile()." 行号-".$this->getLine()."错误码-".$this->getCode()." 信息-".$this->getMessage();
	}

	/**
	 * @param $code
	 * @param bool $isChinese  是否直接抛出中文
	 */
	public  static  function throwException($code,$isChinese = false)
	{
		$class = __CLASS__;
		if($isChinese){
			throw new $class($code,500);
		} else {

			//根据code获取msg
			$msg = static::getMsg($code);
			throw new $class($msg,$code);
		}

	}

	public static  function getMsg($code)
	{
		$template = self::getMsgTemplate();

		if(isset($template[$code])){
			return $template[$code];
		} else {
			$class = __CLASS__;
			throw new $class("错误码未设置".$code);
		}

	}

}

 

lumen bootstrp的app里面注册服务提供者

$app->register(AppProvidersExceptionServiceProvider::class);

providers文件夹下新建文件
<?php
/**
 * Created by PhpStorm.
 * User: costa
 * Date: 2019/3/15
 * Time: 14:12
 */

namespace AppProviders;


use BradyToolExceptionExceptionResult;
use IlluminateSupportServiceProvider;

class ExceptionServiceProvider extends ServiceProvider
{
    /**
     *  注册编码信息
     */
    public function register()
    {
        $tpl = require (dirname(__DIR__) . ‘/Constants/ErrorMsg.php‘);
        ExceptionResult::setMsgTemplate($tpl);
    }
}

 app目录下新建目录 Constants 

分别存放错误码和错误信息

ErrorCode.php

<?php
/**
 * Created by PhpStorm.
 * User: costa
 * Date: 2019/3/15
 * Time: 14:23
 */

namespace AppConstants;


class ErrorCode
{
    /**
     * 基本错误码
     */
    const SUCCESS = 200;
    const UNAUTHORIZED = 401;
    const FAIL = 500;




}

 ErrorMsg.php

<?php
/**
 * Created by PhpStorm.
 * User: costa
 * Date: 2019/3/15
 * Time: 14:22
 */

namespace AppConstants;


return [
    ErrorCode::SUCCESS      => ‘成功‘ ,
    ErrorCode::UNAUTHORIZED => ‘暂无权限!‘ ,
    ErrorCode::FAIL         => ‘失败‘ ,



];

 

使用 在控制器里面

<?php

namespace AppService;

//服务层
use AppConstantsErrorCode;
use AppRepositoryUserRepository;
use BradyToolExceptionExceptionResult;
use MockeryException;

class UserService
{
	public  $userRepository;

	public function __construct()
	{
		$this->userRepository = new UserRepository();
	}

	public function queryUserList($where)
	{
		$where = [‘name‘=>"brady"];
		return $this->userRepository->getList($where);
	}

	public function getUserInfo($id)
	{
		try{
			ExceptionResult::throwException(ErrorCode::UNAUTHORIZED);

			return $this->userRepository->getById($id);

		} catch (Exception $e){
			var_dump($e->getMessage());
		}

	}



}

 

以上是关于lumen添加自定义异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Lumen/Laravel 控制器中添加自定义逻辑的最佳实践

Lumen/Laravel - 使用自定义路由器

VS中添加自定义代码片段——偷懒小技巧

Lumen 提供验证错误的代码

片段中的自定义列表适配器

自定义阵列验证 - Lumen