PHP code example of baagee / php-router
1. Go to this page and download the library: Download baagee/php-router library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
baagee / php-router example snippets
// get请求 可以使用匿名函数
\BaAGee\Router\Router::get('/get', function () {
echo 'get';
}, [
// 第三个参数可以传其他的一些信息,比如可以传中间件
'middleware' => [
'CheckLogin', 'CheckPrivilege', 'GetPhpInputData'
]
]);
// 可以使用@符号把控制器把action分离,注意控制器类名为完全限定类名
// {id}是提取参数,保存到$params['id']里面
\BaAGee\Router\Router::get('/user/{id}', 'User@info');
// 或者使用数组指定具体的处理方法:[控制器,方法]
\BaAGee\Router\Router::get('/account/{id}', ['Account', 'info']);
// 可以使用正则表达式定义路由匹配规则
// []包起来的说明这个值可选
\BaAGee\Router\Router::get('/abc/{id}[/{name}]', function ($params) {
var_dump($params);
});
// 只允许post请求
\BaAGee\Router\Router::post('/post', function () {
echo 'post';
});
// put请求
\BaAGee\Router\Router::put('/put', function () {
echo 'put';
});
// delete请求
\BaAGee\Router\Router::delete('/delete', function () {
echo 'delete';
});
// head请求
\BaAGee\Router\Router::head('/head', function () {
echo 'head';
});
// options请求
\BaAGee\Router\Router::options('/options', function () {
echo 'options';
});
// 设置路由匹配失败的处理
\BaAGee\Router\Router::setNotFound(function () {
http_response_code(404);
echo '404啊';
});
\BaAGee\Router\Router::setMethodNotAllow(function () {
http_response_code(405);
echo '405啊';
});
// 添加路由 post请求
\BaAGee\Router\Router::add('post', '/post2', function () {
echo 'post2';
});
// 添加路由,允许的方法,可以支持多种请求方法
\BaAGee\Router\Router::add(['get', 'post'], '/get/post', function () {
echo 'get/post';
});
// 开始匹配路由并调用对应的回调方法
echo \BaAGee\Router\Router::dispatch($_SERVER['PATH_INFO'], $_SERVER['REQUEST_METHOD']);
// 定义路由规则
$routes = [
[
'path' => '/get/{id}',
'method' => 'get',// 允许的请求方法
'callback' => function ($params) {// 具体的回调方法
echo 'get';
var_dump($params);
return time();
},
// 其他附加信息
'other' => ['other', 'info']
],
[
'path' => '/post[/{name}][/{id}]',
'method' => ['post'],
'callback' => function ($params) {
echo 'post';
var_dump($params);
return time();
},
'other' => ['other', 'info']
],
[
'path' => '/getpost',
'method' => ['post', 'get'],
'callback' => function () {
echo 'post get';
return time();
}
],
[
'path' => '/getput',
'method' => 'get|put',
'callback' => function () {
return 'put get';
}
],
];
// 批量添加路由
\BaAGee\Router\Router::batchAdd($routes);
echo \BaAGee\Router\Router::dispatch($_SERVER['PATH_INFO'], $_SERVER['REQUEST_METHOD']);
// 自定义自己的调用方式
class MyRouter extends \BaAGee\Router\Base\RouterAbstract
{
/**
* 具体的调用方法
* @param string|\Closure $callback 路由回调方法
* @param array $params 请求路由中的参数
* @param string $method 请求方法
* @param array $other 其他路由辅助信息
* @throws \Exception
*/
protected static function call($callback, $params, $method, $other)
{
var_dump($other);
// 获取控制器和方法
list($controller, $action) = explode('->', $callback);
// todo 判断类,方法是否存在...
$obj = new $controller();
// todo 调用 中间件
var_dump($other['middleware']);
// 调用Action
call_user_func_array([$obj, $action], $params);
}
}
MyRouter::get('/get[/{id}]', 'UserController->action', [
'middleware' => [
'CheckLogin',
'CheckPrivilege'
],
'otherRouteInfo' => [
'扒拉扒拉一堆...'
]
]);
echo MyRouter::dispatch($_SERVER['PATH_INFO'], $_SERVER['REQUEST_METHOD']);
class App
{
public function test1($a)
{
echo __FUNCTION__;
}
public function test2($a)
{
echo __FUNCTION__;
}
}
// 添加路由的方法
function addRouter()
{
\BaAGee\Router\Router::get('/get/test1', 'App@test1');
\BaAGee\Router\Router::get('/get/test2', 'App@test2');
\BaAGee\Router\Router::get('/get/test3', 'App@test2');
}
// 是否开发模式
$isDebug = false;
// 如果不是开发模式(false),设置一个路由缓存路径,
// 如果缓存文件存在,会返回true,直接跳过,执行dispatch
// 如果缓存文件不存在,会返回false,然后添加路由,最后执行dispatch,
// 请求结束时将路由信息写入缓存文件,下次执行时文件存在,返回true,
// 跳过添加路由,直接执行dispatch
// 如果是开发模式(true),每次都走添加路由的方法,然后执行dispatch
if ($isDebug || \BaAGee\Router\Router::setCachePath(__DIR__ . '/cache') === false) {
echo '没有缓存';
addRouter();
}
echo \BaAGee\Router\Router::dispatch($_SERVER['PATH_INFO'], $_SERVER['REQUEST_METHOD']);