Klein.php - 轻量级PHP路由库 php框架路由原理
yuyutoo 2024-11-11 16:48 4 浏览 0 评论
只想简单的做个带几个路由的服务,用 PHP 框架就有点大题小作了。Klein.php,这个轻量级的路由库,此时是一个不错的选择。
简介
Klein.php,是 klein 组织在 Github 上开源的 PHP 路由库,代码仓库在 https://github.com/klein/klein.php,目前版本为 2.1.2。Klein 十分灵活,使用正则表达式进行路由匹配;接口简单,方便快速上手开发;性能优秀,每秒可处理 2500+ 请求。
安装
Klein 需要 PHP 5.3.x,使用 Composer 进行安装:
php composer.phar require klein/klein
并在主 PHP 文件中加入 autoload:
require 'vendor/autoload.php';
示例
Klein 的使用十分简单,以下是一个 Hello World 例子:
<?php
require_once __DIR__ . '/vendor/autoload.php';
$klein = new \Klein\Klein();
$klein->respond('GET', '/hello-world', function () {
return 'Hello World!';
});
$klein->dispatch();
使用 respond 注册路由处理方法,并使用 dispatch 运行路由。
Klein 对于路由匹配使用可带命名参数的正则表达式进行,而解析得到的参数可以通过 $request 参数获得:
$klein->respond('/[:name]', function ($request) {
return 'Hello ' . $request->name;
});
下面再看一些更加复杂的例子:
/posts/[*:title][i:id] // 匹配 /posts/this-is-a-title-123
/output.[xml|json:format]? // 匹配 /output,/output.xml 和 /output.json
/[:controller]?/[:action]? // 匹配可选的 /controller/action 格式
也可以同时匹配多种请求方法,通过传递 array 实现:
$klein->respond(array('POST','GET'), $route, $callback);
对于文件上传,klein 通过回调的 $service 参数接收;而对于发送文件,则可以使用 $response 的 send 或 file 实现:
$klein->respond(function ($request, $response, $service) {
$service->xml = function ($object) {
// 处理XML文件
}
$service->csv = function ($object) {
// 处理CSV文件
}
});
$klein->respond('/report.[xml|csv|json:format]?', function ($request, $response, $service) {
$send = $request->param('format', 'json');
$response->$send($report); // 通过send返回对象
});
$klein->respond('/report/latest', function ($request, $response, $service) {
$response->file('/tmp/cached_report.zip'); // 通过file返回文件路径的文件
});
更多
- Klein 支持路由组,可以在同一路由下定义不同的子路由以形成不同的路由命名空间。
$klein->with('/users', function () use ($klein) {
$klein->respond('GET', '/?', function ($request, $response) {
// 用户列表
});
$klein->respond('GET', '/[:id]', function ($request, $response) {
// 获取单个用户
});
});
- Klein 支持服务的惰性存储,可以在首次使用时才初始化。
- Klein 支持参数验证,可自定义验证方法。
$service->validateParam('key')->isHex();
$service->validate($username)->isLen(4,16);
$service->validateParam('key', 'The key was invalid')->isHex()->isLen(32);
- Klein 支持对 PHTML 的带参数渲染。
$service->render('myview.phtml', array('title' => 'My View'));
总结
Klein.php 作为一个轻量的 PHP 路由库,具备了进行微型 Web 服务应用开发的能力;其基于正则的路由匹配方法自由灵活,方便使用;接口简洁明了,易于上手使用。
Klein.php 项目结构清晰,代码注释和文档丰富,单元测试完备,同时代码量不大,代码质量较高,是一个值得学习的PHP库。
相关推荐
- 走进Maven世界
-
Maven作为一个构建工具,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务的具体实现,自动测试、打包、生成文档和报表;它跨平台,同时提供了中央仓库,只需要在pom.xml中配置下所需的jar...
- Maven配置中profile在POM和settings区别
-
Maven配置中profile在POM和settings区别上一节文章...
- Maven的下载与配置
-
1.Maven官网地址首页:https://maven.apache.org/...
- Maven入门,读完这篇就够了
-
前言夜空中最亮的星,2021请照亮我前行~Maven是我们日常开发都会用到的,五一过后,我把看过的Maven基础概念做了整理,作为入门和查阅使用。正文Maven概念...
- maven发包踩坑
-
出现...
- MAVEN详解
-
Maven概述看完本篇文章后相信你对Maven的理解能更进一步常规项目开发存在的问题通常Web项目开发只会创建一个工程,然后所有的jar包都会存放到WEB-INF/lib目录下,如...
- 深圳尚学堂:Maven的安装及配置
-
Maven是一个项目管理的Java工具,在JavaEE中,我们可以使用Maven方便地管理团队合作的项目,现在我们在学习JavaEE框架,使用Maven可以管理类库,有效方便地供团队中的其他人员使用...
- 学Maven,这篇万余字的教程,真的够用了
-
1Maven介绍1.1为什么使用Maven由于Java的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以jar包的形式出现的,例如Spring,Spring...
- java工具篇-Maven安装配置及优化
-
开发springboot和springcloud项目,maven是必不可少的插件。关于maven就不做过多介绍,简单理解,可以理解为一个jar包管理工具,当然,没有这么简单,想了解的可以搜下相关资...
- 快速上手maven
-
Maven的作用在开发过程中需要用到各种各样的jar包,查找和下载这些jar包是件费时费力的事,特别是英文官方网站,可以将Maven看成一个整合了所有开源jar包的合集,我们需要jar包只需要从Mav...
- 看大佬对Maven讲解有多深,Maven setting.xml文件 了解一下
-
通常我们安装了Maven之后会对Mavensetting.xml(Maven的配置文件做一些自定义),本章我们将详细地学习一下Mavensetting.xml文件。文件位置一般存在与Maven安装...
- 最全!最强大!Maven知识大全
-
一、什么是MavenMaven是Apache的一款开源的项目管理工具,是Apache基于ANT进行升级后,研发出了全新的自动化构建工具。Maven使用项目对象模型(POM-ProjectObject...
- 做开发这么久了,还不会搭建服务器Maven私有仓库?这也太Low了吧
-
大家好,我是冰河~~...
- Maven解析让你从新手到高手
-
背景本文从实战角度出发,笔者多年经验总结,能让你快速理解Maven,知其然且知其所以然,全是干货,让我们开始吧。文章概览...
- 后台服务工具maven:maven安装配置
-
1、maven下载下载地址:https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.t...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)