首先新建一个任意名称的控制器文件, 我这里就叫Good.php了
公共函数
公共函数: 所有公共函数在 app\Helper\Functions.php
// 公共函数测试
function getsi(int $i ,string $b): stdClass
{
$c = new stdClass();
{
$c->id = $i;
$c->body = $b;
}
return $c;
}
路由
手动注解 , 生成一个 http://xxx.com/goodlist 的路由 , 方法时Get
<?php
namespace App\Http\Controller;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
/**
* @Controller()
*/
class Good
{
/**
* @RequestMapping("/goodlist",method={"GET"})
*/
public function list()
{
return getsi(123,"碎笔发布");
}
}
获取参数,获取请求方式
<?php
namespace App\Http\Controller;
use Swoft\Context\Context;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\Middleware;
use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
use App\Http\Middleware\DomainLimitMiddleware;
/**
* @Controller()
*/
class Good
{
/**
* 获取restapi参数
* @RequestMapping("/goodlist/{id}",method={"GET"})
*/
public function list(int $id)
{
return getsi($id,"碎笔发布");
}
/**
* request获取restfulapi参数
* @RequestMapping("/goodlist2",method={"GET"})
*/
public function list2(\Swoft\Http\Message\Request $request)
{
$id = $request->get("id",0);
return getsi($id,"碎笔发布");
}
/**
* request获取参数 post
* @RequestMapping("/goodlist3",method={"POST"})
*/
public function list3(\Swoft\Http\Message\Request $request)
{
$id = $request->post("id",10);
return $id;
}
/**
* request获取请求方式
* @RequestMapping("/go",method={"GET","POST"})
*/
public function methods(\Swoft\Http\Message\Request $request)
{
// 请求上下文保存数据
Context::get()->set("user","zhuzhuxia");
// 请求上下文获取数据
echo Context::get()->get("user");
// 请求上下文保存数据
Context::get()->setMulti(["users"=>["id"=>123,"name"=>"zhuzhuxia"]]);
// 请求上下文获取数据
print_r( Context::get()->getData());
// 请求上下文获取请求GET数据
$ids = Context::get()->getRequest()->get("ids",55);
// 请求上下文获取请求POST数据
$id = Context::get()->getRequest()->post("id",55);
// 请求上下文获取请求方式
$method = Context::get()->getRequest()->getMethod();
return [$ids , $id ,$method];
//获取json请求参数
print $request->getRawBody();
print Context::get()->getRequest()->getRawBody();
// 获取任何一种参数
$id = $request->input("id",10);
// 获取请求方式
$method = $request->getMethod();
if ($request->isGet()){
return [$method ,"get请求",$id];
}elseif ($request->isPost()){
return [$method ,"post请求",$id];
}
return [$method,$id];
}
}
通过Context上下文获取参数
/**
* request获取请求方式
* @RequestMapping("/go",method={"GET","POST"})
*/
public function methods(\Swoft\Http\Message\Request $request)
{
// 请求上下文保存数据
Context::get()->set("user","zhuzhuxia");
// 请求上下文获取数据
echo Context::get()->get("user");
// 请求上下文保存数据
Context::get()->setMulti(["users"=>["id"=>123,"name"=>"zhuzhuxia"]]);
// 请求上下文获取数据
print_r( Context::get()->getData());
// 请求上下文获取请求GET数据
$ids = Context::get()->getRequest()->get("ids",55);
// 请求上下文获取请求POST数据
$id = Context::get()->getRequest()->post("id",55);
// 请求上下文获取请求方式
$method = Context::get()->getRequest()->getMethod();
return [$ids , $id ,$method];
}
中间件
- 中间件定义: class上必须写上@Bean()
/**
* Class DomainLimitMiddleware
*
* @Bean()
*/
class DomainLimitMiddleware implements MiddlewareInterface
{
}
- 中间件的使用:
在类或者方法上使用@Middleware()
- 单中间件:
use App\Http\Middleware\DomainLimitMiddleware; /** * @Controller() * @Middleware(DomainLimitMiddleware::class) */ class Good { }
- 多中间件:
use App\Http\Middleware\ApiMiddleware; use App\Http\Middleware\ControllerMiddleware; /** * @Controller() * @Middlewares({ * @Middleware(ApiMiddleware::class), * @Middleware(ControllerMiddleware::class) * }) */ class Good { }
- 全局中间件:
只需在 Bean
配置文件内配置 httpDispatcher
的 middlewares
属性,在数组中加入你的自定义中间件的命名空间地址,相关配置通常在 app/bean.php
内。
return [
...
'httpDispatcher'=>[
'middlewares'=>[
AuthMiddleware::class,
ApiMiddleware::class
]
]
...
]