欢迎了解RestPHP,当前版本为2.0。
示例工程:https://gitee.com/sofical/dns-manager
支持路径参数,如:/users/{userId} 或 /users/{userId}/orders/{orderId}
支持各种HTTP Method,支持Form表单、json、Xml的报文请求
支持多语言设置
支持表单注解验证
使用submodule clone 本项目到您的项目的插件目录中,如:restphp
配置URL重新规则,将所有请求地址重写到上一步的程序入口文件。如,Nginx重写配置:
location / {
index index.php;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
}
}
//RESTPHP 相关配置
//版本号
define('REST_PHP_VERSION', '2.0');
//lib目录,此目录下的包可自动加载
define('DIR_LIB', 'lib');
//RestPHP程序目录
define('DIR_RESTPHP', DIR_LIB . DIRECTORY_SEPARATOR . 'restphp');
//路由文件生成目录
define('DIR_BUILD_TARGET', 'runtime/target');
//HTTP version
define('HTTP_VERSION', '1.1');
//默认接收报文类型
define('CONTENT_TYPE', 'application/json');
//系统时间,秒
define('SYS_TIME', time());
//系统时间,毫秒
define('SYS_MICRO_TIME', microtime(true));
//引入框架
require(DIR_RESTPHP . '/Rest.php');
//程序入口
\restphp\Rest::run();
//版本号
define('REST_PHP_VERSION', '2.0');
//lib目录,此目录下的包可自动加载
define('DIR_LIB', 'lib');
//RestPHP程序目录
define('DIR_RESTPHP', DIR_LIB . DIRECTORY_SEPARATOR . 'restphp');
//构建时需要扫描的目录
define('DIR_BUILD', 'com');
//路由文件生成目录
define('DIR_BUILD_TARGET', 'runtime/target');
//引入框架
require(DIR_RESTPHP . '/Rest.php');
//构建程序入口
\restphp\Rest::build();
示例项目:https://gitee.com/sofical/dns-manager
文件支持自动加载,不需要在逻辑代码中使用require或include。其中自动加载的区域分为了两块区域。
1、项目代码区,即 DIR_BUILD 下的项目文件。
2、lib区,即DIR_LIB下的文件。lib区一般用于第三方引用插件代码。
文件加载机制是通过命名空间和类名进行自动查询匹配,因此 类名需要和文件名保持一致
使用注解@RequestMapping,参数:value、method
value 在class和function中都有效,值可以是一个或多,一个时,可以直接写为:value="/index.html"。多个时,应该写为:value=["/", "/index.html", "/index"]
method HTTP谓词(方法),即:GET、POST、PUT、DELETE、PATCH等,不区分大小写,建议使用大写。
完整示例:
/**
* 首页路由.
* @RequestMapping("")
*/
class IndexController {
/**
* 首页.
* @RequestMapping(value=["/", "/index.html", "/index"], method="GET")
*/
public function index() {
// put your logic here
echo "hello moto!";
}
}
路径参数使用RestHttpRequest::getPathValue()方法获取。注:多路由不支持路径参数。
访问地址/users/97,获取用户ID:97
/**
* @RequestMapping("/users")
*/
class UserController {
/**
* @RequestMapping(value="/{userId}", method="GET")
*/
public function userInfo() {
$userId = RestHttpRequest::getGet("userId");
echo $userId;
}
}
Query参数使用RestHttpRequest::getGet() 或 RestHttpRequest::getParameterAsObject() 获取;使用 RestHttpRequeste::getPageParam() 获取分页对象。
其中RestHttpRequest::getGet() 用于获取单个路径参数,RestHttpRequest::getParameterAsObject() 用于以对象的形式获取一个或多个参数。
1.RestHttpRequest::getGet()应用举例
访问地址/users?name=张,获取name参数值:
/**
* @RequestMapping("/users")
*/
class UserController {
/**
* @RequestMapping(value="", method="GET")
*/
public function userList() {
$name = RestHttpRequest::getGet("name");
echo $name;
}
}
2.RestHttpRequest::getParameterAsObject()应用举例
访问地址/users?name=张&mobile=1360000,获取name和mobile的查询对象
final class queryForm {
private $_name;
private $_mobile;
public function getName() {
return $this->_name;
}
public function setName($name) {
$this-_name = $name;
}
public function getMobile() {
return $this->_mobile;
}
public function setMobile($mobile) {
$this-_mobile = $mobile;
}
}
/**
* @RequestMapping("/users")
*/
class UserController {
/**
* @RequestMapping(value="", method="GET")
*/
public function userList() {
$queryForm = RestHttpRequest::getParameterAsObject(new queryForm());
var_export($queryForm);
}
}
Body 参数使用 RestHttpRequest::getBody() 获取。
应用举例,获取body内容:{"username":"小红","mobile":"13800000000","age":"18"}
final class userForm {
private $_name;
private $_mobile;
private $_age;
public function getName() {
return $this->_name;
}
public function setName($name) {
$this-_name = $name;
}
public function getMobile() {
return $this->_mobile;
}
public function setMobile($mobile) {
$this-_mobile = $mobile;
}
public function getAge() {
return $this->_age;
}
public function setAget($age) {
$this->_age = $age;
}
}
/**
* @RequestMapping("/users")
*/
class UserController {
/**
* @RequestMapping(value="", method="POST")
*/
public function newUser() {
//获取为对象
$userForm = RestHttpRequest::getBody(new userForm());
var_export($userForm);
//获取为数组
$arrUser = RestHttpRequest::getBody();
var_dump($arrUser);
}
}
框架提供了以下注解表单验:
@length(min=最小长度,max=最大长度,message=错误提示)
@notnull(message=错误提示)
@mobile(message=错误提示)
@email(message=错误提示)
@domain(message=错误提示)
@date(format=日期格式,message=错误提示)
@range(min=最小长度,max=最大长度,message=错误提示)
@int(min=最小长度,max=最大长度,message=错误提示)
@ipv4(message=错误提示)
@ipv6(message=错误提示)
@inArray(value=[可选值1|可选值2],message=错误提示)
@notEmpty(message=错误提示)
@customer(method=自定义校验方法,message=错误提示)
使用示例:
<?php
namespace classes\controller\api\vo;
/**
* Class MessageVo
* @package classes\controller\api\vo
*/
class MessageVo {
/**
* 客户名称.
* @length(min=1,max=20,message=名字输入长度为1~20个字符)
* @var string.
*/
private $_name;
/**
* 感兴趣的产品.
* @length(min=1,max=50,message=感兴趣的产品输入长度为1-50个字符)
* @var string
*/
private $_product;
/**
* 手机号码.
* @mobile(message=手机号不正确)
* @var string
*/
private $_mobile;
/**
* 更多说明
* @length(max=255,message=更多说明长度不能超过255字)
* @var string
*/
private $_more;
/**
* @return string
*/
public function getName()
{
return $this->_name;
}
/**
* @param string $name
*/
public function setName($name)
{
$this->_name = $name;
}
/**
* @return string
*/
public function getProduct()
{
return $this->_product;
}
/**
* @param string $product
*/
public function setProduct($product)
{
$this->_product = $product;
}
/**
* @return string
*/
public function getMobile()
{
return $this->_mobile;
}
/**
* @param string $mobile
*/
public function setMobile($mobile)
{
$this->_mobile = $mobile;
}
/**
* @return string
*/
public function getMore()
{
return $this->_more;
}
/**
* @param string $more
*/
public function setMore($more)
{
$this->_more = $more;
}
}
<?php
namespace classes\controller\api;
use classes\controller\api\vo\MessageVo;
use classes\service\CrmMessageService;
use restphp\http\RestHttpRequest;
use restphp\validate\RestValidate;
/**
* Class MessagesController
* @RequestMapping(value="/api/messages")
* @package classes\controller\api
*/
class MessagesController {
/**
* 接收消息.
* @RequestMapping(value="", method="POST")
* @throws \ReflectionException
*/
public function receiveMessage() {
$message = RestHttpRequest::getRequestBody(new MessageVo(), true);
CrmMessageService::saveMessage($message);
}
}
数据响应为开放自由式响应,无特殊固定规则和格式。
框架的RestHttpResponse类提供常用数据响应方法封状;RestTpl类提供了简单的模板引擎。
更多请参考:https://gitee.com/sofical/restphp-core/blob/master/README.md
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型