mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-03 04:08:01 +08:00
commit
ef6b89588d
@ -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
|
||||
```
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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`。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user