\hymie\router\sourceScanedRouterSource

扫描模块下所有类(PSR-4 规范的类),根据 Annotation RouterMapping 定义生成控制器配置。

正式环境使用这个类时建议一定要使用缓存,因为存在大量遍历目录,遍历反射类方法等操作

这个类使用 doctrine-annotation 处理注解

Summary

Methods
Properties
Constants
getRouterInfo()
No public properties found
No constants found
createRouterInfoItem()
No protected properties found
N/A
requireClassFiles()
getClassPathValue()
createClassRouterInfo()
processClassesAnnotation()
No private properties found
N/A

Methods

getRouterInfo()

getRouterInfo(array  $modules) : array

根据传入的模块名读取路由配置,返回数组,格式为

[ 0, "pathRegex" => [ 'module" => "moduleName", "controllerDef" => ["controllerClassName", "controllerMethodName"] // or "controllerDef" => "controllerClassName:controllerMethodName" } ]

或者

[ 'path_regex' => ['controller_classname', 'method_name'] ]

Parameters

array $modules

模块数组

Returns

array

createRouterInfoItem()

createRouterInfoItem(array  $routerInfo, string  $module, string  $path, string|array  $controllerInfo) : array

创建路由数组项目,创建前会检查路由是否已定义,如已定义会输出 warning 级别日志后替换原项目。

Parameters

array $routerInfo
string $module
string $path
string|array $controllerInfo

Returns

array

requireClassFiles()

requireClassFiles(string  $module) : void

递归遍历模块目录,取得所有符合 PSR-4 标准的类(文件名第一个字母大写,其他部分目前不好判断是否符合规范)并包含该类

Parameters

string $module

模块名

getClassPathValue()

getClassPathValue(\hymie\router\source\Doctrine\Common\Annotations\AnnotationReader  $reader, \ReflectionClass  $reflectionClass) : string

如果类上注解了 RouterMapping 则获取注解内容,否则返回空字符

Parameters

\hymie\router\source\Doctrine\Common\Annotations\AnnotationReader $reader

注解 reader

\ReflectionClass $reflectionClass

反射类实例

Returns

string —

如果注解了 RouterMapping 则返回其值,否则返回''

createClassRouterInfo()

createClassRouterInfo(string  $module, \hymie\router\source\Doctrine\Common\Annotations\AnnotationReader  $reader, \ReflectionClass  $reflectionClass, string  $classPathValue) : array

创建具体类的路由控制数组,会遍历类下所有 public 方法。

如果方法注解了 @RouterMapping(value='...') 那么获取值,并与 classPathValue 组合成路由配置。

例外:名为 index 的方法是类的默认路由,该方法上无需再进行注解,如果类注解了路由,那么该方法会默认匹配到类路由上。

Parameters

string $module
\hymie\router\source\Doctrine\Common\Annotations\AnnotationReader $reader
\ReflectionClass $reflectionClass
string $classPathValue

如果类上注解了路由则为路由信息,否则为''

Returns

array

processClassesAnnotation()

processClassesAnnotation(string  $module, array  $classes) : array

循环处理所有类的路由注解

Parameters

string $module

模块名

array $classes

类数组

Returns

array