Merge pull request #21 from hyperf-cloud/pr/20

Optimized comment.
This commit is contained in:
李铭昕 2019-06-24 10:53:54 +08:00 committed by GitHub
commit ef6b89588d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 36 deletions

View File

@ -177,8 +177,13 @@ foreach($users as $user){
use Hyperf\DbConnection\Db;
$result = Db::statement(" CALL pro_test(?,'?') ",[1,'your words']); //返回bool CALL pro_test(??) 为存储过程,属性为 MODIFIES SQL DATA
return $result ; // 执行成功返回1否则返回 0 ;
$inserted = Db::insert('insert into user (id, name) values (?, ?)', [1, 'Hyperf']); // 返回是否成功 bool
$affected = Db::update('update user set name = ? where id = ?', ['John', 1]); // 返回受影响的行数 int
$result = Db::statement(" CALL pro_test(?,'?') ",[1,'your words']); // 返回 bool CALL pro_test(??) 为存储过程,属性为 MODIFIES SQL DATA
return $result ; // 执行成功返回1否则返回 0
```

View File

@ -3,7 +3,7 @@
`Hyperf` 里,业务代码都运行在 `Worker进程` 上,也就意味着一旦任意一个请求的业务存在没有捕获处理的异常的话,都会导致对应的 `Worker进程` 被中断退出,虽然被中断的 `Worker进程` 仍会被重新拉起,但对服务而已也是不能接受的,且捕获异常并输出合理的报错内容给客户端也是更加友好的。
我们可以通过对各个 `server` 定义不同的 `异常处理器(ExceptionHandler)`,一旦业务流程存在没有捕获的异常,到会被传递到已注册的 `异常处理器(ExceptionHandler)` 去处理。
# 注册异常处理器
## 注册异常处理器
目前仅支持配置文件的形式注册 `异常处理器(ExceptionHandler)`,配置文件位于 `config/autoload/exceptions.php`,将您的自定义异常处理器配置在对应的 `server` 下即可:
@ -24,7 +24,7 @@ return [
> 每个异常处理器配置数组的顺序决定了异常在处理器间传递的顺序。
# 定义异常处理器
## 定义异常处理器
我们可以在任意位置定义一个 `类(Class)` 并继承抽象类 ` Hyperf\ExceptionHandler\ExceptionHandler;` 并实现其中的抽象方法,如下:
@ -61,7 +61,7 @@ class MyExceptionHandler extends ExceptionHandler
}
```
# 自定义我的异常类
## 自定义我的异常类
```php
<?php
namespace App\Exception\CustomException;
@ -81,7 +81,7 @@ class MyException extends \Exception
}
```
# 我们可以在控制器手动抛出异常,就会触发以上异常处理相关代码
## 我们可以在控制器手动抛出异常,就会触发以上异常处理相关代码
```php
//以下是控制器代码片段
use App\Exception\CustomException\MyException;

View File

@ -153,7 +153,12 @@ class IndexController
}
```
#### 中间件相关的代码
>快捷生成命令php ./bin/hyperf.php gen:middleware Auth/FooMiddleware
生成中间件
```
php ./bin/hyperf.php gen:middleware Auth/FooMiddleware
```
```php
<?php
@ -162,13 +167,13 @@ declare(strict_types=1);
namespace App\Middleware\Auth;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Hyperf\HttpServer\Contract\ResponseInterface as resp; // 这里需要手动引入response类便于向浏览器响应信息
class FooMiddleware implements MiddlewareInterface
{
@ -176,47 +181,42 @@ class FooMiddleware implements MiddlewareInterface
* @var ContainerInterface
*/
protected $container;
/**
* @var RequestInterface
*/
protected $request;
/**
* @var HttpResponse
*/
protected $response;
public function __construct(ContainerInterface $container,resp $response)
public function __construct(ContainerInterface $container, HttpResponse $response, RequestInterface $request)
{
$this->container = $container;
$this->response = $response;
/* $this->request = $container->get(RequestInterface::class); // 从容器解析出request对象
$this->response = $container->get(ResponseInterface::class); // 从容器解析出response对象*/
$this->request = $request;
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
/*
var_dump($request->getQueryParams()); // 获取requests对象中相关的请求参数便也业务逻辑判断
var_dump($request->getServerParams()); // 获取requests对象中相关的请求参数便也业务逻辑判断
*/
// 根据具体业务判断逻辑走向这里假设用户携带的token有效
$is_valid_token=true;
if($is_valid_token){
// 根据具体业务判断逻辑走向这里假设用户携带的token有效
$isValidToken = true;
if ($isValidToken) {
return $handler->handle($request);
}else{
/*
* 如果不满足条件,那么程序直接从这里向浏览器响应,停止继续向下执行后续代码
*/
return $this->response->json(
array(
'code'=>-1,
'msg'=>"failed",
'data'=>[
"error"=>"中间里验证token无效阻止继续向下执行"
],
)
);
}
return $this->response->json(
[
'code' => -1,
'data' => [
'error' => '中间里验证token无效阻止继续向下执行',
],
]
);
}
}
```
中间件的执行顺序为 `BarMiddleware -> FooMiddleware`