摘要:非常轻量级的单一文件的路由器。会将真实的名作为参数传入需要你在此方法中调度来执行真正的请求方法。例如网站维护时可允许配置的值为路由将会直接执行此路由。
inhere/sroute 非常轻量级的单一文件的路由器。简洁、自定义性强
referrer the project noahbuschermacaw , but add some feature.
支持请求方法: GET POST PUT DELETE HEAD OPTIONS
支持事件: found notFound. 你可以做一些事情当触发事件时(比如记录日志等)
支持设置匹配路由的解析器: SRoute::setMatchedRouteParser(). 你可以自定义如何调用匹配的路由处理程序.
支持自动匹配路由到控制器就像 yii 一样, 请参看配置项 autoRoute.
支持手动调度一个路由通过方法 SRoute::dispatchTo()
你也可以不配置任何东西, 它也能很好的工作
安装{ "require": { "inhere/sroute": "dev-master" } }使用
首先, 导入类
use inheresrouteSRoute;添加路由
// 匹配 GET 请求. 处理器是个闭包 Closure SRoute::get("/", function() { echo "hello"; }); // 匹配参数 "test/john" SRoute::get("/test/(w+)", function($arg) { echo $arg; // "john" }); // 匹配 POST 请求 SRoute::post("/user/login", function() { var_dump($_POST); }); // 匹配 GET 或者 POST SRoute::map(["get", "post"], "/user/login", function() { var_dump($_GET, $_POST); }); // 允许任何请求方法 SRoute::any("/home", function() { echo "hello, you request page is /home"; });
使用控制器方法如果配置了 "ignoreLastSep" => true, "/index" 等同于 "/index/"
SRoute::get("/index", "appcontrollersHome@index");动态匹配控制器方法
动态匹配控制器方法, 需配置 "dynamicAction" => true
NOTICE: 使用动态匹配控制器方法, 应当使用 any() 添加路由. 即此时无法限定请求方法 REQUEST_METHOD
// 访问 "/home/test" 将会执行 "appcontrollersHome::test()" SRoute::any("/home/(w+)", appcontrollersHome::class); // 可匹配 "/home", "/home/test" 等 SRoute::any("/home(/w+)?", appcontrollersHome::class);
使用方法执行器上面两个的区别是 第一个无法匹配 /home
配置 actionExecutor 为你需要的方法名,例如配置为 "actionExecutor" => "run",那所有的方法请求都会提交给此方法。
会将真实的action名作为参数传入run($action), 需要你在此方法中调度来执行真正的请求方法。
在你需要将路由器整合到自己的框架时很有用
示例:
// 访问 "/user", 将会调用 appcontrollersUser::run("") SRoute::get("/user", "appcontrollersUser"); // 访问 "/user/profile", 将会调用 appcontrollersUser::run("profile") SRoute::get("/user/profile", "appcontrollersUser"); // 同时配置 "actionExecutor" => "run" 和 "dynamicAction" => true, // 访问 "/user", will call appcontrollersUser::run("") // 访问 "/user/profile", will call appcontrollersUser::run("profile") SRoute::get("/user(/w+)?", "appcontrollersUser");自动匹配路由到控制器
支持自动匹配路由到控制器就像 yii 一样, 需配置 autoRoute.
"autoRoute" => [ "enable" => 1, // 启用 "controllerNamespace" => "examplescontrollers", // 控制器类所在命名空间 "controllerSuffix" => "Controller", // 控制器类后缀 ],匹配所有
配置 "matchAll" 可用于拦截所有请求。 (例如网站维护时)
可允许配置 "matchAll" 的值为
路由path
"matchAll" => "/about", // a route path
将会直接执行此路由。
回调
"matchAll" => function () { echo "System Maintaining ... ..."; },
将会直接执行此回调
设置事件处理(if you need)SRoute::any("/404", function() { echo "Sorry,This page {$_GET["path"]} not found."; });
// 成功匹配路由 SRoute::on(SRoute::FOUND, function ($uri, $cb) use ($app) { $app->logger->debug("Matched uri path: $uri, setting callback is: " . is_string($cb) ? $cb : get_class($cb)); }); // 当匹配失败, 重定向到 "/404" SRoute::on("notFound", "/404"); // 或者, 当匹配失败, 输出消息... SRoute::on("notFound", function ($uri) { echo "the page $uri not found!"; });设置配置(if you need)
// set config SRoute::config([ "stopOnMatch" => true, "ignoreLastSep" => true, "dynamicAction" => true, // "matchAll" => "/", // a route path // "matchAll" => function () { // echo "System Maintaining ... ..."; // }, // enable autoRoute, work like yii framework // you can access "/demo" "/admin/user/info", Don"t need to configure any route "autoRoute" => [ "enable" => 1, "controllerNamespace" => "examplescontrollers", "controllerSuffix" => "Controller", ], ]);
默认配置如下
// 所有的默认的配置 [ // stop on matched. only match one "stopOnMatch" => true, // Filter the `/favicon.ico` request. "filterFavicon" => false, // ignore last "/" char. If is True, will clear last "/", so "/home" equals to "/home/" "ignoreLastSep" => false, // match all request. // 1. If is a valid URI path, will match all request uri to the path. // 2. If is a callable, will match all request then call it "matchAll" => "", // eg: "/site/maintenance" or `function () { echo "System Maintaining ... ..."; }` // auto route match @like yii framework "autoRoute" => [ // If is True, will auto find the handler controller file. "enable" => false, // The default controllers namespace, is valid when `"enable" = true` "controllerNamespace" => "", // eg: "appcontrollers" // controller suffix, is valid when `"enable" = true` "controllerSuffix" => "", // eg: "Controller" ], // default action method name "defaultAction" => "index", // enable dynamic action. // e.g // if set True; // SRoute::any("/demo/(w+)", appcontrollersDemo::class); // you access "/demo/test" will call "appcontrollersDemo::test()" "dynamicAction" => false, // action executor. will auto call controller"s executor method to run all action. // e.g // `run($action)` // SRoute::any("/demo/(:act)", appcontrollersDemo::class); // you access `/demo/test` will call `appcontrollersDemo::run("test")` "actionExecutor" => "", // "run" ]
开始路由分发NOTICE: 必须在调用 SRoute::dispatch() 之前使用 SRoute::config() 来进行一些配置
SRoute::dispatch();运行示例
你可以通过 bash ./php_server 来运行一个测试服务器, 现在你可以访问 http://127.0.0.1:5670
项目地址github
git@osc
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/23035.html
摘要:我采用原生编写后台,因为感觉增删改查的功能很简单,就懒得用框架了其实是不会。浏览模式它也有一个,用来切换文章列表和文章详情,也就是和编辑模式它加载了作为工具栏,然后可以进行文章的撰写与修改。 介绍 项目地址:https://github.com/jrainlau/MintloG (特别乱,参考就好-_-|||)showImg(https://segmentfault.com/img/b...
摘要:最适合入门的初级教程四路由可以分发请求路由中还可以引入页面我们可以在中搞定一切了但是如果把业务逻辑都写入到路由中那路由将庞大的难以维护于是控制器就有了很明显的存在价值把业务逻辑写在控制器中路由只负责转发请求到指定的控制器即可那我们开始创建控 最适合入门的Laravel初级教程(四) 路由可以分发请求; 路由中还可以引入 html 页面;我们可以在 route/web.php 中搞定一切...
摘要:本篇文章主要是我在开发前研究了的单页面应用,因为需要用到的,所以确保安装了,建议官网安装最新的稳定版本。本文章只是和大家探讨怎么利用配合做一个单页面应用,具体关于里面的内容怎么写并不在本篇文章的介绍范围。 本篇文章主要是我在开发前研究了webpack+vue.js的单页面应用,因为需要用到node的npm,所以确保安装了node,建议官网安装最新的稳定版本。并且在项目中需要加载一些np...
摘要:显示为显示为显示为单页面应用用户访问轨迹埋点开发过单页面应用的同学,一定比较清楚,单页面应用的路由切换是无感知的,不会重新进行请求去获取页面,而是通过改变页面渲染视图来实现。 前言 最近开发的埋点项目,需要记录用户行为轨迹即用户页面访问顺序。需要在页面跳转的时候,记录用户访问的信息(比如 url ,请求头部等),非单页面应用可以给 window 对象加上一个 beforeunload ...
摘要:趁着周末偷来一点闲,总结近期的工作和学习,想着该花点心思把这套基于的单页应用模板简单的给介绍一下。同时也是一套可扩展的单页应用开发模板。 趁着周末偷来一点闲,总结近期的工作和学习,想着该花点心思把N3-admin这套基于N3-components的单页应用模板简单的给介绍一下。 首发于个人博客;blog.lxstart.net项目路径: https://github.com/N3-co...
阅读 1900·2021-11-24 09:39
阅读 3499·2021-09-28 09:36
阅读 3260·2021-09-06 15:10
阅读 3384·2019-08-30 15:44
阅读 1134·2019-08-30 15:43
阅读 1782·2019-08-30 14:20
阅读 2695·2019-08-30 12:51
阅读 2003·2019-08-30 11:04