Files
im-demo-server/config/helpers.php
2025-06-25 16:12:51 +08:00

81 lines
2.6 KiB
PHP

<?php
/**
* 路由注册封装
* 使用 cc_route_register 函数,路由名需要用连词符 "-" 来表示,并且控制器要使用小驼峰的命名规范
* @param $router
* @param $class
* @return void
*/
if ( !function_exists('cc_route_register') ) {
function cc_route_register ($router,$class): void
{
foreach ( $router as [ $method, $router_name ] ) {
// ds(Illuminate\Support\Facades\Route::$method( $router_name, [$class, conjunction_symbol_processing($router_name)] ));
Illuminate\Support\Facades\Route::$method( $router_name, [$class, conjunction_symbol_processing($router_name)] );
}
}
}
/**
* 自动路由注册封装
* 使用 cc_auto_route_register 函数,路由名需要用连词符 "-" 来表示,并且控制器要使用小驼峰的命名规范
* @param $class
* @return void
*/
if ( !function_exists('cc_auto_route_register') ) {
function cc_auto_route_register ($class): void
{
foreach ($class as $key => $value) {
// 获取控制器$value的所有方法
$methods = (new ReflectionClass($value))->getMethods();
// 注册路由
foreach ($methods as $method) {
// 获取方法注释 @Method
$docComment = $method->getDocComment();
if ($method->name === '__construct' || preg_match('/@Method\s+(NO)\b/', $docComment, $matches)) {
continue;
}
$httpMethod = 'any';
// 查询 @Method GET 或者 @Method POST
if (preg_match('/@Method\s+(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|ANY)\b/', $docComment, $matches)) {
$httpMethod = $matches[1];
}
Illuminate\Support\Facades\Route::$httpMethod( $key. '/'. cc_camel_case_to_dash($method->getName()), [$value, conjunction_symbol_processing($method->name)] );
}
}
}
}
/**
* 连赐福转换小驼峰
* @param $string
* @return string
*/
if(!function_exists('conjunction_symbol_processing')) {
function conjunction_symbol_processing($string): string
{
$string = str_replace('-', ' ', $string); // 将连字符替换为空格
$string = ucwords($string); // 将每个单词的首字母大写
$string = str_replace(' ', '', $string); // 空格删除
$string[0] = lcfirst($string)[0]; // 首字母小写
return $string;
}
}
// 小驼峰转换-
if ( !function_exists('cc_camel_case_to_dash') ) {
function cc_camel_case_to_dash($str): string
{
return strtolower(preg_replace('/([a-z])([A-Z])/', '$1-$2', $str));
}
}