PHP自定义URI验证:URL类中未完成验证方法的技术求助
完善自定义URI验证的
aa方法逻辑 我来帮你补全这个URI路径匹配的逻辑,先理清楚核心需求:我们要验证拆分后的URI片段是否逐层匹配$uriData二维数组的合法结构(比如一级路径是数组的键,二级路径是对应键下允许的子路径列表),同时处理空路径、无效一级路径等边界情况。
完善后的完整代码
public function aa($path, $uriData) { // 拆分路径并过滤空片段(处理多斜杠、首尾斜杠导致的无效空值) $pathSegments = array_filter(explode('/', $path)); // 空路径(比如根路径 "/")直接判定为合法 if (empty($pathSegments)) { return true; } $currentValidationLevel = $uriData; foreach ($pathSegments as $segment) { // 如果当前层级不是数组,或当前片段不在合法键列表中,验证失败 if (!is_array($currentValidationLevel) || !array_key_exists($segment, $currentValidationLevel)) { return false; } // 进入下一层级继续验证后续片段 $currentValidationLevel = $currentValidationLevel[$segment]; } // 所有路径片段都匹配成功,验证通过 return true; }
逻辑细节说明
- 路径预处理:用
array_filter过滤拆分后的空片段,避免//user这种多斜杠路径导致的无效空值干扰验证逻辑。 - 空路径处理:直接返回
true,对应网站根路径的合法场景。 - 逐层匹配:
- 从
$uriData顶层开始遍历每个路径片段 - 检查当前片段是否是当前层级数组的合法键(适配你定义的二维数组结构,比如
['user' => ['profile', 'settings'], ...]) - 只要有一个片段不匹配,立即返回
false终止验证 - 所有片段匹配完成后,返回
true表示路径合法
- 从
适配你的现有代码
你的isValid方法调用逻辑可以直接沿用,只需要确保self::getUriData()返回符合预期的二维数组,比如示例结构:
private static function getUriData() { return [ 'user' => ['profile', 'settings'], 'post' => ['view', 'edit', 'create'], 'admin' => ['dashboard', 'user-manage'] ]; }
额外优化建议
- 如果需要支持动态参数路径(比如
user/123这种带ID的场景),可以在$uriData中用占位符标记(比如['user' => ['{id}', 'profile']]),然后在验证时通过正则判断片段是否符合占位符格式 - 可以添加日志记录,方便调试验证失败的URI路径
内容的提问来源于stack exchange,提问作者user8517929
相关产品推荐
相关产品推荐

